如何检查opencv窗口是否已关闭?
我想这样做:
cvNamedWindow("main", 1);
while(!cvWindowIsClosed("main"))
{
cvShowImage("main", myImage);
}
但是这些没有这样的cvWindowIsClosed(...)函数!
答案 0 :(得分:7)
函数cvGetWindowHandle返回本机窗口句柄(如果是Win32则为HWND,对于GTK +则为GtkWidget)。 [仅Qt后端]特定于qt的细节:函数cvGetWindowHandle返回继承自Qt类QWidget的本机窗口句柄。
我们的想法是获取窗口的句柄,然后使用特定的平台API函数来检查该句柄是否仍然有效。
修改强>
或者你可以使用传统的cvWaitKey()
方法:
char exit_key_press = 0;
while (exit_key_press != 'q') // or key != ESC
{
// retrieve frame
// display frame
exit_key_press = cvWaitKey(10);
}
答案 1 :(得分:3)
假设您只打开了一个图像窗口,然后单击其角落的“x”按钮会导致waitkey()函数返回-1值。 然后检查cvGetWindowHandle(“name_of_the_window”)函数是否返回0。如果它确实返回0,则窗口实际上是关闭的。 我在OpenCV3中测试过它。 但我仍然不清楚waitkey()返回的原因 - 。如果有人解释为什么会这样,我将非常感激。 [我不知道在这么久之后,我对这个问题的回答是否相关。但希望如果其他人遇到同样的问题(比如我),这个答案可能会帮助他们解决问题。 感谢。
答案 2 :(得分:2)
这应该
VwCustomerSizes
答案 3 :(得分:1)
您可以使用cv :: getWindowProperty方法。
这样做:
cv::namedWindow("main", WINDOW_AUTOSIZE);
while(1)
{
cv::imshow("main", myImage);
// add this IF.
if (cv::getWindowProperty("main", WND_PROP_AUTOSIZE) == -1)
break;
}
当关闭窗口时,getWindowProperty将返回-1。
答案 4 :(得分:1)
在Python OpenCV版本3.4.2(Ubuntu Bionic)中,cv2.getWindowProperty('Main', cv2.WND_PROP_VISIBLE)
在关闭窗口时返回浮动的0.0(零),在打开时返回1.0(一个),无论是否可见。是的,在最小化时,在另一个窗口之后或在其他桌面上,仍为1.0。
答案 5 :(得分:1)
就在 main() 结束之前,放入以下代码:
int main(int, char**){
.
.
.
bool visible = true;
while(visible){
waitKey(1000);
visible = getWindowProperty("Main",WND_PROP_VISIBLE) > 0;
}
return 0;
}