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中optparse模块使用浅析
Jan 01 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python实现k-means算法
Feb 23 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
详解python调用cmd命令三种方法
Jul 08 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
python datetime时间格式的相互转换问题
Jun 11 Python
Python 如何反方向迭代一个序列
Jul 28 Python
Python调用jar包方法实现过程解析
Aug 11 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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/13 PHP
php实现分页工具类分享
2014/01/09 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
javascript下function声明一些小结
2007/12/28 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
基于jquery & json的省市区联动代码
2012/06/26 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
总结python实现父类调用两种方法的不同
2017/01/15 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
美国知名生活购物网站:Goop
2017/11/03 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
小班开学寄语
2014/04/04 职场文书
公司表扬稿范文
2015/05/05 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技