我正在使用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”按钮时没有任何反应。有没有办法使这项工作?
答案 0 :(得分:9)
使用cv2
Python模块有一种方法可以做到这一点,我在这里发布了解决方案:
https://stackoverflow.com/a/37881722/2897426
这篇文章仅供参考,所以任何寻找它的人都可以找到它
答案 1 :(得分:5)
OpenCV没有此功能,默认只处理按键。
如果你想这样做,你必须使用创建窗口的窗口管理器的句柄(GTK,QT,...)。
This post describes a similar issue in case you use windows. 如果没有,请告诉我;)
答案 2 :(得分:3)
我遇到了同样的问题,并且找到了一种简单的方法:
您可以使用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()
中使用了错误的第二个参数,而问题仅在稍后的线程中得到间接解决。我将其添加为答案,因为当我第一次访问该线程时找不到正确的解决方案,而这正是我所需要和使用的。