如何检查opencv窗口是否已关闭

如何检查opencv窗口是否已关闭?

我想要做:

cvNamedWindow("main", 1); while(!cvWindowIsClosed("main")) { cvShowImage("main", myImage); } 

但这些没有这样的cvWindowIsClosed(…)函数!

您可以使用cvGetWindowHandle()实现您要做的事情:

函数cvGetWindowHandle返回本机窗口句柄(如果是Win32,则为HWND,对于GTK +,则为GtkWidget)。 [仅Qt后端]特定于qt的细节:函数cvGetWindowHandle返回inheritance自Qt类QWidget的本机窗口句柄。

我们的想法是获取窗口的句柄,然后使用特定的平台API函数来检查该句柄是否仍然有效。

编辑:

或者你可以使用tradicional cvWaitKey()方法:

 char exit_key_press = 0; while (exit_key_press != 'q') // or key != ESC { // retrieve frame // display frame exit_key_press = cvWaitKey(10); } 

假设您只打开了一个图像窗口,然后单击其角落的“x”按钮会导致waitkey()函数返回-1值。 然后检查cvGetWindowHandle(“name_of_the_window”)函数是否返回0。 如果它确实返回0,则窗口实际上是关闭的。 我在OpenCV3中测试过它。 但我仍然不清楚waitkey()返回的原因 – 。 如果有人解释为什么会这样,我将非常感激。 [经过这么长时间后,我不知道这个问题的回答是否相关。 但希望如果其他人遇到同样的问题(像我一样),这个答案可能会帮助他们。]谢谢。

这应该做

 #include  std::string mTitle = "title of my window"; while (cvGetWindowHandle(mTitle.c_str())) { // ... } 

您可以使用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。