python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框

  最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测。于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是:

1.在视频播放的过程中,当想选中哪幅图来标记目标时,按下暂停键。

2.框出你想要检测的目标。

那要怎么实现呢?

首先是暂停怎么实现呢?介于是摄像头直播,我们先将那副图像复制并在另一个窗口显示。然后关掉摄像头,就完成了暂停。后面标记完目标再打开摄像头就行了。那具体怎么实现呢...

import cv2

drawing = False
ix, iy = -1, -1
tempFlag = False
def draw_circle(event, x, y, flags, param):
    global ix, iy, drawing, mode, cap, template, tempFlag
    if event == cv2.EVENT_LBUTTONDOWN:
        tempFlag = True
        drawing = True
        ix, iy = x, y                        #按下鼠标左键,用全局变量ix,iy记录下当前坐标点
    elif event == cv2.EVENT_LBUTTONUP:
        if drawing == True:
            drawing = False                  #鼠标左键抬起,画出矩形框
            cv2.rectangle(frame, (ix, iy), (x, y), (0, 255, 0), 1)
            template = frame[iy:y, ix:x, :]  #截取框中的目标图像
            cap = cv2.VideoCapture(-1)       #打开摄像头
            cv2.imshow(‘img‘, frame)         #显示画框后的图像

cv2.namedWindow(‘img‘)
cv2.setMouseCallback(‘img‘, draw_circle)
cap = cv2.VideoCapture(-1)
while (True):
    ret, frame = cap.read()
    cv2.imshow(‘Vedio‘, frame)
    if tempFlag == True:         #如果框出了目标,显示该目标
        cv2.imshow(‘temp‘, template)
    k = cv2.waitKey(33)
    if k == 27:                  #退出视频
        break
    elif k == 32:                #如果按下空格键
        while(1):
            cap.release()        #关掉摄像头
            imgCOPY = frame      #显示关闭摄像头前最后一张图像
            cv2.imshow(‘img‘, frame)
            k = cv2.waitKey(0)   #等待调用鼠标回调函数框出目标
            if k == 32:          #框完目标,再次按下空格键,摄像头捕捉的画面重新播放
                break

结果如图

对于在图像中框出目标,其实我先看了网上的代码,比如http://blog.csdn.net/szfhy/article/details/51087301

我画框后的图片是这样的

内心是崩溃的,宝宝就只想要一个矩形框嘛~

本来我是想在画矩形框时,有一个矩形框随鼠标拖动大小随之改变,且只有一个矩形框,鼠标抬起时,矩形框确定。暂时不知怎么实现,有知道的可以交流一下,嘿嘿~

时间: 2024-10-13 13:34:34

python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框的相关文章

从一段视频中按帧提取图片

这里实现的是从一段视频中每10帧读取第10帧图片,代码如下: # -*- coding:utf-8 -*- #视频中按序列提取帧,获得训练数据 import cv2 import os video_src_path = "D:/mtcnn" video_save_path = "D:/mtcnn/mydata" videos = os.listdir(video_src_path) videos = filter(lambda x : x.endswith(&quo

python+opencv读取视频,调用摄像头

引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目录 逐帧显示实现视频播放 while 1: ret, frame = cap.read() #读取 cv2.imshow("capture", frame) #显示 if cv2.waitKey(100) & 0xff == ord('q'): #按q退出 break 释放摄像头对

50行Python代码实现视频中物体颜色识别和跟踪

前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 机器学习与统计学 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef 目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection

python+opencv读取视频并设置可调整窗口大小

import cv2 cap = cv2.VideoCapture('data/1.mp4') while cap.isOpened(): ret, frame = cap.read() # 调整窗口大小 cv2.namedWindow("frame", 0) # 0可调大小,注意:窗口名必须imshow里面的一窗口名一直 cv2.resizeWindow("frame", 1600, 900) # 设置长和宽 cv2.imshow('frame', frame)

html5中canvas的使用 获取鼠标点击页面上某点的RGB

1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> 需要谷歌的一个html5.js的文件即可. 注意:必须插入在<head></he

WPF中关于自定义控件的滚动条鼠标停留在内容上鼠标滚轮滚动无效的问题

问题起因:在一个用户控件里放置了1个TreeView垂直顺序放置. 当用户控件中的内容超过面板大小时,滚动条会自动出现 ,但是只有当鼠标指示在右边滚动条的那一条位置时,才支持鼠标滚轴滚动. 点在控件内部时滚轴无效. 问题分析:由于设置了d:designheight,自定义控件的宽高都是随着父容器的变化而变化的,于是我将Height设为较小的固定高度时,发现鼠标停留在控件内容时,滚轮控制滚动条滚动是有效的.这就说明UI上显示的滚动条并非是这个自定义控件的,而是这个自定义控件所在的父容器的,这样也解

Qt Creator中如何在QLabel上画矩形框并且保存画完后的图形

问题描述: 在QLabel上显示一张图片,然后在该图片上画一个矩形框  最后保存一张带矩形框的图片 第一步: 在图片上画矩形框   网上教程很多  代码如下: 头文件 #ifndef MYQLABEL #define MYQLABEL #include <QLabel> #include <QMouseEvent> #include <QString> class MyQLabel : public QLabel{ // Q_OBJECT public: // expl

python OpenCV使用

关于OpenCV简介  OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法.OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口. 在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常

Python爬取视频指南

摘自:https://www.jianshu.com/p/9ca86becd86d 前言 前两天尔羽说让我爬一下菜鸟窝的教程视频,这次就跟大家来说说Python爬取视频的经验 正文 https://www.cniao5.com/ 菜鸟窝上有很多教程视频,但是这些视频好像没有直接的下载地址,而且有些教程视频还是有期限的,那么问题就产生了我看的速度比较慢而且视频又很多,没等我看完视频就到期了怎么办?这时候写一个爬虫将这些教程视频下载下来就很好地解决了这个问题 当然,对于某些视频网站的VIP电影.视频