OpenCV关闭窗口与鼠标问题

时间:2012-03-27 10:01:37

标签: opencv window mouseevent

OpenCV 2.2版,C ++接口。

在带有以下代码段的窗口中显示加载的图像

cvStartWindowThread();

Mat image;
image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

if(! image.data )                              // Check for invalid input
{
    cout <<  "Could not open or find the image" << std::endl ;
    return -1;
}

namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image );   

while( 1 ) {
    if( cvWaitKey(100) == 27 ) break;
}

使用鼠标按close button关闭图像时出现问题,而不是使用转义键。

在这种情况下,我的程序将被while阻止,退出它的唯一方法就是停止执行,这显然是不可取的。

是否有任何功能可以控制是否按下close button? 这样我就可以在while循环中添加它:

E.g。

while( 1 ) {
    if( cvWaitKey(100) == 27 ) break;
    if( cvCloseButtonPressed == 1) break; <--- purely invented method I'm looking for...
}

3 个答案:

答案 0 :(得分:10)

您可以使用cvGetWindowHandle()函数来处理您指定的窗口。窗口句柄是特定于操作系统的功能。 win32的一个示例如下所示:

HWND hwnd = (HWND)cvGetWindowHandle("Display window");
while(IsWindowVisible(hwnd)) {
    if( cvWaitKey(100) == 27 ) break;
}

IsWindowVisible()是一个winapi函数,因此您可能想要添加#include <windows.h>

答案 1 :(得分:2)

不要在循环中显示图像,而是尝试只显示一次:

imshow("Display window", image);
waitKey(0);

waitKey(0)表示"wait forever"

答案 2 :(得分:0)

if (!cvGetWindowHandle(windowName.c_str())) {
    destroyAllWindows();
    exit(1);
}