我有以下代码:
total_frames = 50
cv2.cv.NamedWindow("Dragonfly Simulation")
cv2.cv.StartWindowThread()
for i in range(total_frames):
# do stuff
img_name = # something
img = cv2.cv.LoadImage(img_name)
cv2.cv.ShowImage("Dragonfly Simulation", img)
cv2.cv.WaitKey(2)
cv2.cv.DestroyWindow("Dragonfly Simulation")
cv2.cv.WaitKey(1)
# rest of code
那么它做了什么:
- 打开一个窗口
- 在循环中,在窗口上显示图像
- 完成后,关闭窗口
- 运行其余代码
但是在这种情况下,我有之前给出的 total_frame
。我不想要那个。
相反,我想要一个执行以下操作的代码:
- 打开一个窗口
- 在循环中,在窗口上显示图像
- 等待用户关闭该窗口
- 当用户关闭该窗口时,退出循环,继续执行其余代码。
但是,我在 OpenCV 中找不到可以检测用户何时关闭窗口的函数。任何人都可以提出解决方法吗?
原文由 dessskris 发布,翻译遵循 CC BY-SA 4.0 许可协议
我只是在寻找一种方法来检测何时使用窗口的
X
按钮关闭窗口,除了等待按键之外,但我无法在任何地方找到答案(IsWindowVisible
和cvGetWindowHandle
在Python中不可用cv2
模块)。所以我玩了一下,这就是它的工作原理:
cv2.getWindowProperty()
返回-1
一旦窗口关闭。有关解释,请参阅枚举的文档
cv::WindowPropertyFlags
:getting the flag with index0
is the fullscreen property,但实际上使用哪个标志并不重要,它们都成为-1
窗口关闭后。注意:这可能只适用于某些 GUI 后端。值得注意的是,它不适用于 Debian/Ubuntu 软件包中使用的 GTK 后端。要改为使用 Qt 后端,您必须通过 pip 安装
opencv-python
。