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 #⿏标左键抬起,画出矩形框
template = frame[iy:y, ix:x, :] #截取框中的⽬标图像
cap = cv2.VideoCapture(-1) #打开摄像头
cv2.imshow('img', frame) #显⽰画框后的图像
cv2.namedWindow('img')
rectangle函数opencvcv2.setMouseCallback('img', draw_circle)
cap = cv2.VideoCapture(-1)
while (True):
ret, frame = ad()
cv2.imshow('Vedio', frame)
if tempFlag == True: #如果框出了⽬标,显⽰该⽬标
cv2.imshow('temp', template)
k = cv2.waitKey(33)
if k == 27: #退出视频
break
elif k == 32: #如果按下空格键
while(1):
imgCOPY = frame #显⽰关闭摄像头前最后⼀张图像
cv2.imshow('img', frame)
k = cv2.waitKey(0) #等待调⽤⿏标回调函数框出⽬标
if k == 32: #框完⽬标,再次按下空格键,摄像头捕捉的画⾯重新播放
break
结果如图
我画框后的图⽚是这样的
内⼼是崩溃的,宝宝就只想要⼀个矩形框嘛~
本来我是想在画矩形框时,有⼀个矩形框随⿏标拖动⼤⼩随之改变,且只有⼀个矩形框,⿏标抬起时,矩形框确定。暂时不知怎么实现,有知道的可以交流⼀下,嘿嘿~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论