明霞山资源网 Design By www.htccd.com
本文实例为大家分享了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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
明霞山资源网 Design By www.htccd.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
明霞山资源网 Design By www.htccd.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。