OpenCV关闭带有鼠标问题的窗口 OpenCV版本2.2,C++接口。

OpenCV关闭带有鼠标问题的窗口 OpenCV版本2.2,C++接口。,opencv,window,mouseevent,Opencv,Window,Mouseevent,使用以下代码段在窗口中显示加载的图像时 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"

使用以下代码段在窗口中显示加载的图像时

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

您可以使用
cvGetWindowHandle()
函数获取命名窗口的句柄。窗口句柄是操作系统特有的功能。 win32的示例如下所示:

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

IsWindowVisible()是一个winapi函数,因此您可能希望添加
#include

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

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

waitKey(0)
表示

@MichalKottman实际上它也在linux上使用g++编译器工作,只是与sintax略有不同。这是我一直在寻找的功能,谢谢!注意:它似乎不适用于Windows+MinGW编译器,因为opencv在MinGW上的实现中有一个bug??我不知道它什么时候会被修复,或者它已经被修复了(因为我不定期更新到最新版本)。添加更多的文本,以便读者能够理解您想要实现的目标。
imshow("Display window", image);
waitKey(0);
if (!cvGetWindowHandle(windowName.c_str())) {
    destroyAllWindows();
    exit(1);
}