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对excel文档去重及求和的实例
Apr 18 Python
对Python中的@classmethod用法详解
Apr 21 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
python使用webdriver爬取微信公众号
Aug 31 Python
java判断三位数的实例讲解
Jun 10 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
python实现文件的分割与合并
Aug 29 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
Python虚拟环境venv用法详解
May 25 Python
Python3合并两个有序数组代码实例
Aug 11 Python
Python Selenium自动化获取页面信息的方法
Aug 31 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和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
jQuery的强大选择器小结
2009/12/27 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Django对models里的objects的使用详解
2019/08/17 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Python request中文乱码问题解决方案
2020/09/17 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
人力资源管理系自荐信
2014/05/31 职场文书
精神病医院见习报告
2014/11/03 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
送给客户微信问候语!
2019/07/04 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android