如何在Python的Opencv摄像窗口中添加开始、停止、捕获和关闭按钮

2024-10-01 19:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在视频捕获窗口中设置开始、停止、捕获和关闭按钮来启动、停止、拍摄快照和关闭窗口?

我正在使用以下代码打开摄像机进行视频流:

import cv2.cv as cv
    cv.NamedWindow("camera", 1)
    capture = cv.CaptureFromCAM(0)
    while True:
        img = cv.QueryFrame(capture)
        cv.ShowImage("camera", img)
        if cv.WaitKey(10) == 27:
            break

Tags: 代码importimg视频ascv2快照按钮
2条回答

我以前在OpenCV上遇到过这个问题。据我所知,OpenCV中的按钮没有任何功能。

但是,我使用了Tkinter并创建了一个画布和一些按钮(在您的情况下,这些按钮将是start、stop、capture、close)。使用OpenCV捕获的每个帧我都绘制在Tkinter画布上。

我是用这个来做逐帧程序的,所以我不确定这个方法在实时性上有多好。

一个非常快速的示例代码:

from Tkinter import *
import cv2.cv as cv

root = Tk()

w = Canvas(root, width=500, height=300, bd = 10, bg = 'white')
w.grid(row = 0, column = 0, columnspan = 2)

b = Button(width = 10, height = 2, text = 'Button1')
b.grid(row = 1, column = 0)
b2 = Button(width = 10, height = 2, text = 'Button2')
b2.grid(row = 1,column = 1)

cv.NamedWindow("camera",1)
capture = cv.CaptureFromCAM(0)

while True:
    img = cv.QueryFrame(capture)
    canvas.create_image(0,0, image=img)
    if cv.WaitKey(10) == 27:
        break

root.mainloop()

这可能会也可能不会马上生效,因为我现在还不能测试这个。我可以看到的一个潜在变化是OpenCV使用的图像格式。您可能需要使用其中一个转换函数来更改格式。

按钮是不可能的,但你可以使用鼠标点击和按键来控制你的视频。例如,使用左键单击切换播放/暂停并通过按键笔划实现录制:

import cv2

run=False
frame=0
path=#some video path

def foo(event, x, y, flags, param):
    global run
    global frame
    #check which mouse button was pressed
    #e.g. play video on left mouse click
    if event == cv2.EVENT_LBUTTONDOWN:
        run= not run
        while run:

            frame+=1
            frame=cap.read()[1]
            cv2.imshow(window_name, frame)
            key = cv2.waitKey(5) & 0xFF
            if key == ord("v"):
                pass
                #do some stuff on key press

    elif event == cv2.EVENT_RBUTTONDOWN:
        pass
        #do some other stuff on right click


window_name='videoPlayer'
cv2.namedWindow(window_name)
cv2.setMouseCallback(window_name, foo)

cap=cv2.VideoCapture(path)

相关问题 更多 >

    热门问题