OpenCV关闭窗口与鼠标问题

Mat*_*teo 3 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;
}
Run Code Online (Sandbox Code Playgroud)

通过close button用鼠标按下而不是使用转义键来关闭图像时遇到问题.

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

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

例如

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

yuy*_*ppe 10

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

HWND hwnd = (HWND)cvGetWindowHandle("Display window");
while(IsWindowVisible(hwnd)) {
    if( cvWaitKey(100) == 27 ) break;
}
Run Code Online (Sandbox Code Playgroud)

IsWindowVisible()是一个winapi函数,所以你可能想要添加 #include <windows.h>