我有以下代码:
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
Run Code Online (Sandbox Code Playgroud)
那么它做了什么:
但是在这种情况下,我有total_frame之前给出的.我不希望这样.
相反,我想要一个执行以下操作的代码:
但是,我在OpenCV中找不到可以检测用户何时关闭窗口的函数.有人可以建议一个解决方法吗?
Sim*_*sch 30
我正在寻找一种方法X,除了等待按键之外,还使用窗口按钮检测窗口何时关闭,但我无法在任何地方找到答案(IsWindowVisible并且cvGetWindowHandle在Python cv2模块中不可用).
所以我玩了,这是它的工作原理:
while cv2.getWindowProperty('window-name', 0) >= 0:
keyCode = cv2.waitKey(50)
# ...
Run Code Online (Sandbox Code Playgroud)
cv2.getWindowProperty()-1窗口关闭后立即返回.
有关解释,请参阅枚举文档cv::WindowPropertyFlags:获取带有索引的标志0是全屏属性,但实际上使用哪个标志并不重要,它们都会-1在窗口关闭后立即生效.
小智 14
从版本2.2开始,有一个简单的解决方案(这是从hist.py中的循环修改):
cv2.imshow('image',im)
while True:
k = cv2.waitKey(100) # change the value from the original 0 (wait forever) to something appropriate
...
elif k == 27:
print('ESC')
cv2.destroyAllWindows()
break
if cv2.getWindowProperty('image',cv2.WND_PROP_VISIBLE) < 1:
break
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我使用 getWindowProperty('image', WND_PROP_VISIBLE) 在 C++ 上进行了测试,但它不起作用。所以我使用了 WND_PROP_AUTOSIZE 并且它有效。
我是这样的:
cv::namedWindow("myTitle", WINDOW_AUTOSIZE);
while(1)
{
cv::imshow("myTitle", myImage);
if (cv::getWindowProperty("myTitle", WND_PROP_AUTOSIZE) == -1)
break;
}
Run Code Online (Sandbox Code Playgroud)