【发布时间】:2016-05-02 09:42:15
【问题描述】:
我有以下代码:
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 中找不到可以检测用户何时关闭窗口的函数。有人可以提出解决方法吗?
【问题讨论】:
-
也许你可以捕捉到一些异常?例如尝试访问窗口,如果它因 NoWindowExistsException/NullPointerException 而失败,则使用您的代码。
-
@joto umm,对不起,我是 OpenCV 的新手,如何检查异常?使用我当前的代码,如果我关闭窗口,代码就会停止。另外,来自 ShowImage 的手册:“如果在此函数之前未创建窗口,则假定使用 CV_WINDOW_AUTOSIZE 创建窗口”
-
我对 OpenCV 一点也不熟悉。我只是认为关闭窗口后该实例将保留。也许这就是你要找的?要全局存储一些 cv 引用,以便无论 Window 是否关闭都可以访问它?我只是猜测。
-
@joto umm 我正在对神经元模拟进行建模,因此我想根据用户的需要运行模拟(而不是指定的持续时间或帧数)。因此想要检测用户何时关闭此类窗口。我想或者我可以检测到键盘按下?不完全确定如何做到这一点......
-
你能在循环过程中关闭窗口吗?