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获取当前时间的方法
Jan 14 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
Scrapy框架使用的基本知识
Oct 21 Python
python通过tcp发送xml报文的方法
Dec 28 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
通过cmd进入python的实例操作
Jun 26 Python
python挖矿算力测试程序详解
Jul 03 Python
Python3 元组tuple入门基础
Feb 09 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
Feb 24 Python
Python安装使用Scrapy框架
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运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python求最大连续子数组的和
2018/07/07 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
Python3读写ini配置文件的示例
2020/11/06 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
新闻专业个人求职信
2013/12/19 职场文书
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS