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内置函数bin() oct()等实现进制转换
Dec 30 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
python中装饰器级连的使用方法示例
Sep 29 Python
在python中使用正则表达式查找可嵌套字符串组
Oct 24 Python
Anaconda入门使用总结
Apr 05 Python
python使用webdriver爬取微信公众号
Aug 31 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
python导入pandas具体步骤方法
Jun 23 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
心扬JS分页函数代码
2010/09/10 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
Python解析nginx日志文件
2015/05/11 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
详解Python中的正则表达式
2018/07/08 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
应聘面试自我评价
2014/01/24 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
离婚被告答辩状
2015/05/22 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang