您的位置:

使用OpenCV中的NamedWindow展示图像

在OpenCV中使用NamedWindow函数可以方便地展示图像,它提供了各种设置参数来自定义窗口的大小、位置、颜色等属性。同时,NamedWindow还支持鼠标响应事件和键盘响应事件。在本文中,我们将从以下几个方面详细阐述NamedWindow的使用方法。

一、创建并显示一个窗口

使用NamedWindow函数创建并显示一个窗口非常简单,如下所示:
cv::namedWindow("window_name", cv::WINDOW_NORMAL);
cv::imshow("window_name", image);
cv::waitKey(0);
cv::destroyWindow("window_name");
上述代码中,“window_name”是窗口的名称,image是需要显示的图像。WINDOW_NORMAL参数用于设置窗口的大小和位置可调节,等同于WINDOW_AUTOSIZE参数(大小固定)并且在不同平台下行为较为一致。 该窗口的大小和位置可以通过resizeWindow和moveWindow函数来调整,如下所示:
cv::resizeWindow("window_name", 640, 480);
cv::moveWindow("window_name", 100, 100);
第一个参数是窗口名称,第二个参数是宽度,第三个参数是高度。moveWindow函数可调整窗口的位置。

二、设置命名窗口的属性

NamedWindow函数还支持各种属性设置,如下所示:
cv::namedWindow("window_name", cv::WINDOW_NORMAL);
cv::setWindowProperty("window_name", cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN);
上述代码设置了全屏显示,可使用esc键退出全屏。 有关其他属性,请参见下表。 | 属性名称 | 描述 | |--------|------| | WINDOW_NORMAL | 可调整大小和位置的窗口 | | WINDOW_AUTOSIZE | 固定大小的窗口 | | WINDOW_OPENGL | 支持OpenGL渲染 | | WINDOW_FULLSCREEN | 全屏显示窗口 | | WND_PROP_FULLSCREEN | 窗口是否全屏 | | WND_PROP_AUTOSIZE | 窗口是否可调整大小 | | WND_PROP_ASPECT_RATIO | 窗口宽高比 | | WND_PROP_OPENGL | 窗口是否支持OpenGL渲染 | | WND_PROP_VISIBLE | 窗口是否可见 | | WND_PROP_TOPMOST | 窗口是否置顶 |

三、处理鼠标响应事件

NamedWindow函数还支持鼠标事件的响应。
void onMouse(int event, int x, int y, int flags, void* userdata)
{
    if (event == cv::EVENT_LBUTTONUP)
    {
        printf("Mouse clicked at (%d,%d)\n", x, y);
    }
}

int main()
{
    cv::Mat image = cv::imread("image.jpg");
    cv::namedWindow("window_name", cv::WINDOW_NORMAL);
    cv::setMouseCallback("window_name", onMouse, NULL);
    cv::imshow("window_name", image);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}
setMouseCallback函数用于设置鼠标事件响应函数,可以响应左键、右键、中键和滚轮等事件。

四、处理键盘响应事件

NamedWindow函数还支持键盘事件的响应。
void onKeyPress(int key, void* userdata)
{
    printf("The key '%c' (%d) was pressed.\n", key, key);
}

int main()
{
    cv::Mat image = cv::imread("image.jpg");
    cv::namedWindow("window_name", cv::WINDOW_NORMAL);
    cv::setWindowTitle("window_name", "My Window");
    cv::setMouseCallback("window_name", onMouse, NULL);
    cv::setKeyboardCallback(onKeyPress);
    cv::imshow("window_name", image);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}
setKeyboardCallback函数用于设置键盘事件响应函数,可以响应任意按键。

五、总结

在本文中,我们详细介绍了如何使用OpenCV中的NamedWindow函数展示图像,并对其进行自定义设置,同时使用鼠标和键盘响应事件,使展示图像的交互性更强。希望大家能够掌握NamedWindow的使用方法,在实际项目中充分发挥它的优势。