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 命令行参数sys.argv
Sep 06 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
Python类的动态绑定实现原理
Mar 21 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
一行代码python实现文件共享服务器
Apr 22 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 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效率,提高php性能的一些方法
2011/03/24 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
php eval函数用法总结
2012/10/31 PHP
php 启动报错如何解决
2014/01/17 PHP
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
解决vue props 拿不到值的问题
2018/09/11 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Python OOP类中的几种函数或方法总结
2019/02/22 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
省级优秀班集体申报材料
2014/05/25 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
代领毕业证委托书
2014/08/02 职场文书
创先争优活动心得体会
2014/09/04 职场文书
大学生简短的自我评价
2014/09/12 职场文书
小学优秀班主任材料
2014/12/17 职场文书
大学生个人学年总结
2015/02/15 职场文书
升学宴学生致辞
2015/09/29 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android