18

我正在使用 Python 中的 OpenCV 显示来自摄像机的实时视频。这是代码:

capture = cv.CaptureFromCAM(0)
if capture:
    cv.NamedWindow("Live Video", cv.CV_WINDOW_AUTOSIZE)
    frame = cv.QueryFrame(capture)
    if frame:
        cv.ShowImage("Live Video", frame)    
        cv.WaitKey(0)

cv.DestroyWindow("Live Video")

现在,我只能通过按“esc”关闭视频窗口,但是当我点击窗口的关闭“X”按钮时什么也没有发生。有没有办法让它工作?

4

3 回答 3

19

使用cv2Python 模块有一种方法可以做到这一点,我在这里发布了解决方案:

https://stackoverflow.com/a/37881722/2897426

这篇文章仅供参考,任何寻找它的人都可以找到它

于 2016-06-17T12:40:11.210 回答
7

我遇到了同样的问题,我找到了一种简单的方法:

您可以 cv2.getWindowProperty(windowName, cv2.WND_PROP_VISIBLE)用来检查当前窗口是否可见,如果不可见,您可以销毁该窗口。该方法返回一个1如果它是可见的,0如果它不是。下面是一个实现:


while True: 
    _, frame = cap.read()

    cv2.imshow(windowName, frame)
    keyCode = cv2.waitKey(1)

    if cv2.getWindowProperty(windowName, cv2.WND_PROP_VISIBLE) <1:
        break
cv2.destroyAllWindows()

接受的答案链接到一个永远不会工作的解决方案,因为 0 包含在 >=0 中,并且在 中使用了错误的第二个参数cv2.getWindowProperty(),而这些问题只是在线程的稍后部分得到间接解决。我将其添加为答案,因为当我第一次访问此线程时找不到正确的解决方案,而这正是我需要和使用的。

于 2020-08-05T00:18:25.320 回答
5

OpenCV 没有这个特性,默认只处理按键。

如果你想这样做,你必须使用创建你的窗口的窗口管理器的句柄(GTK,QT,...)。

如果您使用 Windows,这篇文章描述了一个类似的问题。 如果没有,请告诉我;)

于 2012-11-09T12:24:13.040 回答