python opencv鼠标事件实现画框圈定目标获取坐标信息


Posted in Python onApril 18, 2020

本文实例为大家分享了python-opencv鼠标事件画框圈定目标的具体代码,供大家参考,具体内容如下

在视频/相机中,用鼠标画矩形框,圈定目标,从而获得鼠标的起始坐标点a、终止坐标点b

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 27 09:32:02 2016

@author: http://blog.csdn.net/lql0716
"""
import cv2
import numpy as np

current_pos = None
tl = None
br = None

#鼠标事件
def get_rect(im, title='get_rect'): # (a,b) = get_rect(im, title='get_rect')
 mouse_params = {'tl': None, 'br': None, 'current_pos': None,
 'released_once': False}

 cv2.namedWindow(title)
 cv2.moveWindow(title, 100, 100)

 def onMouse(event, x, y, flags, param):

 param['current_pos'] = (x, y)

 if param['tl'] is not None and not (flags & cv2.EVENT_FLAG_LBUTTON):
  param['released_once'] = True

 if flags & cv2.EVENT_FLAG_LBUTTON:
  if param['tl'] is None:
  param['tl'] = param['current_pos']
  elif param['released_once']:
  param['br'] = param['current_pos']

 cv2.setMouseCallback(title, onMouse, mouse_params)
 cv2.imshow(title, im)

 while mouse_params['br'] is None:
 im_draw = np.copy(im)

 if mouse_params['tl'] is not None:
  cv2.rectangle(im_draw, mouse_params['tl'],
  mouse_params['current_pos'], (255, 0, 0))

 cv2.imshow(title, im_draw)
 _ = cv2.waitKey(10)

 cv2.destroyWindow(title)

 tl = (min(mouse_params['tl'][0], mouse_params['br'][0]),
 min(mouse_params['tl'][1], mouse_params['br'][1]))
 br = (max(mouse_params['tl'][0], mouse_params['br'][0]),
 max(mouse_params['tl'][1], mouse_params['br'][1]))

 return (tl, br) #tl=(y1,x1), br=(y2,x2)

#读取摄像头/视频,然后用鼠标事件画框 
def readVideo(pathName, skipFrame): #pathName为视频文件路径,skipFrame为视频的第skipFrame帧
 cap = cv2.VideoCapture(0) #读取摄像头
 if not cap.isOpened(): #如果为发现摄像头,则按照路径pathName读取视频文件
 cap = cv2.VideoCapture(pathName) #读取视频文件,如pathName='D:/test/test.mp4'
 c = 1

 while(cap.isOpened()):
 ret, frame = cap.read()
 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 if(c>=skipFrame):
  mask = np.zeros(gray.shape, dtype=np.uint8) #掩码操作,该矩阵与图片大小类型一致,为初始化全0像素值,之后对其操作区域赋值为1即可
  if(c==skipFrame):
  (a,b) = get_rect(frame, title='get_rect') #鼠标画矩形框
  img01, img02 = frame, frame
  gray01, gray02 = gray, gray
  else:
  img1, img2 = prev_frame, frame
  gray1, gray2 = prev_frame, frame
  cv2.imshow('frame', frame)
 c = c + 1
 prev_gray = gray
 prev_frame = frame
 if cv2.waitKey(1) & 0xFF == ord('q'): #点击视频窗口,按q键退出
  break
 cap.release()
 cv2.destroyAllWindows()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python读取html中指定元素生成excle文件示例
Apr 03 Python
Python实现文件按照日期命名的方法
Jul 09 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 Python
学习和使用python的13个理由
Jul 30 Python
Python Django 命名空间模式的实现
Aug 09 Python
python中的itertools的使用详解
Jan 13 Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 Python
解决python 找不到module的问题
Feb 12 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 Python
python点击鼠标获取坐标(Graphics)
Aug 10 #Python
python matplotlib库直方图绘制详解
Aug 10 #Python
python字典的遍历3种方法详解
Aug 10 #Python
python命名空间(namespace)简单介绍
Aug 10 #Python
简单介绍python封装的基本知识
Aug 10 #Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 #Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 #Python
You might like
牡丹941资料
2021/03/01 无线电
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
python字典键值对的添加和遍历方法
2016/09/11 Python
itchat接口使用示例
2017/10/23 Python
python实现报表自动化详解
2017/11/16 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python算的上脚本语言吗
2020/06/22 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
机械电子工程专业推荐信范文
2013/11/20 职场文书
中学生校园广播稿
2014/01/16 职场文书
工作表现自我评价
2014/02/08 职场文书
软件售后服务承诺书
2014/05/21 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
怎么写工作检讨书
2014/11/16 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS