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

时间:2012-02-17 00:45:23

标签: c++ c opencv

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

我想这样做:

cvNamedWindow("main", 1);

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

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

6 个答案:

答案 0 :(得分:7)

使用cvGetWindowHandle()

可以实现您的目标
  

函数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;
}