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中函数传递参数是值传递还是引用传递
Nov 07 Python
Python向excel中写入数据的方法
May 05 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
django使用xadmin的全局配置详解
Nov 15 Python
用python求一重积分和二重积分的例子
Dec 06 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
浅析Python迭代器的高级用法
Jul 16 Python
python爬虫分布式获取数据的实例方法
Nov 26 Python
快速创建python 虚拟环境
Nov 28 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 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
php实现简单洗牌算法
2013/06/18 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
Python导入txt数据到mysql的方法
2015/04/08 Python
Python的pycurl包用法简介
2015/11/13 Python
Python字符串处理实现单词反转
2017/06/14 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
python实现逻辑回归的示例
2020/10/09 Python
新加坡交友网站:be2新加坡
2019/04/10 全球购物
linux比较文件内容的命令是什么
2015/09/23 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
采购经理岗位职责
2014/02/16 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
教师个人培训总结
2015/02/11 职场文书
创业计划书详解
2019/07/19 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android