OpenCV 关闭带有鼠标问题的窗口

标签 opencv window mouseevent

OpenCV 2.2 版,C++ 接口(interface)。

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

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

我在使用鼠标按下关闭按钮而不是转义键来关闭图像时遇到问题。

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

是否有控制关闭按钮是否被按下的函数? 这样我就可以将它添加到 while 循环中,如下所示:

例如

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

最佳答案

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

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

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

关于OpenCV 关闭带有鼠标问题的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887310/

相关文章:

c++ - 无法使用 OpenCV 打开我的笔记本电脑摄像头

javascript - 无法在 Canvas 中引用窗口宽度/高度

java - 当按下 f11 时,如何使窗口全屏显示?

javascript - 使用 JavaScript 检测页面中的任何鼠标事件

flex4 - Flex 4 :Capturing mouse events with spark.primitive.path 对象

c++ - 如何在 openCv 中将常量 double 值与 GpuMat 相乘?

c++ - 轮廓 opencv : How to eliminate small contours in a binary image

python - 如何在数字所在的确切位置裁剪图像?

java - 检查我的窗口监听器是否正常工作

css - onmouseover 事件不适用于移动设备