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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 Python
python写一个md5解密器示例
Feb 23 Python
详解Python if-elif-else知识点
Jun 11 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
python实现简单俄罗斯方块
Mar 13 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
Python实现代码块儿折叠
Apr 15 Python
Python机器学习三大件之一numpy
May 10 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 Python
python中tkinter复选框使用操作
Nov 11 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
德生PL660的电路分析和打磨
2021/03/02 无线电
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php session的锁和并发
2016/01/22 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
Javascript !!的作用
2008/12/04 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
如何快速上手Vuex
2017/02/14 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
python读取word文档的方法
2015/05/09 Python
Python内建数据结构详解
2016/02/03 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Python序列化pickle模块使用详解
2020/03/05 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
python异步Web框架sanic的实现
2020/04/27 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
GC是什么?为什么要有GC?
2013/12/08 面试题
会计自我鉴定范文
2013/10/06 职场文书
2014学年自我鉴定
2014/02/23 职场文书
个人贷款担保书
2014/04/01 职场文书
初婚未育证明样本
2014/10/24 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python