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中使用支持向量机SVM实践
Dec 27 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
python实现归并排序算法
Nov 22 Python
对python判断是否回文数的实例详解
Feb 08 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Selenium alert 弹窗处理的示例代码
Aug 06 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
学习YUI.Ext 第二天
2007/03/10 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
python根据京东商品url获取产品价格
2015/08/09 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python正则表达式经典入门教程
2017/05/22 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
关于幼儿的自我评价
2013/12/18 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
创业计划书之美甲店
2019/09/20 职场文书
创业计划书之废品回收
2019/09/26 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
Python安装使用Scrapy框架
2022/04/12 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android