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使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 Python
python中的turtle库函数简单使用教程
Jul 23 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
Pycharm小白级简单使用教程
Jan 08 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
python源文件的字符编码知识点详解
Mar 04 Python
用python画城市轮播地图
May 28 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中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
php查询及多条件查询
2017/02/26 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
利用Python演示数型数据结构的教程
2015/04/03 Python
Python的Tornado框架异步编程入门实例
2015/04/24 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
Python网络编程 Python套接字编程
2017/09/13 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
Django中信号signals的简单使用方法
2019/07/04 Python
wxPython实现整点报时
2019/11/18 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
自我鉴定怎么写
2013/12/05 职场文书
通信研究生自荐信
2014/02/01 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
周年庆典答谢词
2015/01/20 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
导游词之长城八达岭
2019/09/24 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
整理Python中常用的conda命令操作
2021/06/15 Python
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server