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实现字符串和日期相互转换的方法
May 13 Python
Python中用max()方法求最大值的介绍
May 15 Python
python选择排序算法实例总结
Jul 01 Python
Python手机号码归属地查询代码
May 04 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
python切片及sys.argv[]用法详解
May 25 Python
Python实现合并两个列表的方法分析
May 28 Python
python实现点对点聊天程序
Jul 28 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 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
留言板翻页的实现详解
2006/10/09 PHP
php+mysql分页代码详解
2008/03/27 PHP
php xfocus防注入资料
2008/04/27 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
javascript实现二分查找法实现代码
2007/11/12 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python logging模块学习笔记
2014/05/24 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
softmax及python实现过程解析
2019/09/30 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
《雪地里的小画家》教学反思
2014/02/22 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
《风筝》教学反思
2016/02/23 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
DIY胆机必读:各国电子管评价
2022/04/06 无线电