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 相关文章推荐
Pycharm 设置默认头的图文教程
Jan 17 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
Django Rest framework认证组件详细用法
Jul 25 Python
python scrapy爬虫代码及填坑
Aug 12 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
在python3中实现更新界面
Feb 21 Python
使用Python发现隐藏的wifi
Mar 04 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
彻底解决Python包下载慢问题
Nov 15 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
pytorch中的model=model.to(device)使用说明
May 24 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
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
基于jquery的商品展示放大镜
2010/08/07 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
python获取mp3文件信息的方法
2015/06/15 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
大学生应聘推荐信范文
2013/11/19 职场文书
求职面试个人自我评价
2014/02/28 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
中标通知书
2015/04/17 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
初二物理教学反思
2016/02/19 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript