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中创建字典的几种方法总结(推荐)
Apr 27 Python
pyqt5自定义信号实例解析
Jan 31 Python
Python中GIL的使用详解
Oct 03 Python
Python中作用域的深入讲解
Dec 10 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
django中间键重定向实例方法
Nov 10 Python
Python API自动化框架总结
Nov 12 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
pytorch的batch normalize使用详解
Jan 15 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
Python绘制词云图之可视化神器pyecharts的方法
Feb 23 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中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python实现树形打印目录结构
2018/03/29 Python
Python对切片命名的实现方法
2018/10/16 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
python else语句在循环中的运用详解
2020/07/06 Python
python实现学生通讯录管理系统
2021/02/25 Python
美国最大的团购网站:Groupon
2016/07/23 全球购物
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
大学自我鉴定范文
2013/12/26 职场文书
初一地理教学反思
2014/01/16 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
出纳岗位职责
2015/01/31 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
预备党员党支部意见
2015/06/02 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书