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实现udp数据报传输的方法
Sep 26 Python
win与linux系统中python requests 安装
Dec 04 Python
python实现SOM算法
Feb 23 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
Python类装饰器实现方法详解
Dec 21 Python
python实现flappy bird小游戏
Dec 24 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
Django 静态文件配置过程详解
Jul 23 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
python爬虫工具例举说明
Nov 30 Python
Python实现双向链表
May 25 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字符串截取问题
2006/11/28 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
PyMongo安装使用笔记
2015/04/27 Python
Python中装饰器高级用法详解
2017/12/25 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
播音主持专业个人自我评价
2014/01/09 职场文书
关于元旦的广播稿
2014/02/16 职场文书
2014植树节活动总结
2014/03/11 职场文书
群教个人对照检查材料
2014/08/20 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
学习保证书
2015/01/17 职场文书
创业计划书之物流运送
2019/09/17 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
js作用域及作用域链工作引擎
2022/07/07 Javascript