使用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的使用方法,在实际项目中充分发挥它的优势。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/293649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-26 13:14
下一篇 2024-12-26 13:14

相关推荐

  • 如何在PyCharm中安装OpenCV?

    本文将从以下几个方面详细介绍如何在PyCharm中安装OpenCV。 一、安装Python 在安装OpenCV之前,请确保已经安装了Python。 如果您还没有安装Python,可…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • Python OpenCV 直线检测

    本文将介绍在Python OpenCV中进行直线检测的方法,主要涉及到图像的边缘检测、霍夫变换和绘制直线等操作。 一、边缘检测 由于直线检测是从图像的边缘开始的,因此必须先找到图像…

    编程 2025-04-29
  • 如何实现图像粘贴到蒙版

    本文将从多个方面介绍图像粘贴到蒙版的实现方法。 一、创建蒙版 首先,在HTML中创建一个蒙版元素,用于接收要粘贴的图片。 <div id=”mask” style=”widt…

    编程 2025-04-29
  • Python图像黑白反转用法介绍

    本文将从多个方面详细阐述Python图像黑白反转的方法和技巧。 一、Pillow模块介绍 Pillow是Python的一个图像处理模块,可以进行图片的裁剪、旋转、缩放等操作。使用P…

    编程 2025-04-28
  • Matlab二值图像全面解析

    本文将全面介绍Matlab二值图像的相关知识,包括二值图像的基本原理、如何对二值图像进行处理、如何从二值图像中提取信息等等。通过本文的学习,你将能够掌握Matlab二值图像的基本操…

    编程 2025-04-28
  • Python实现图像转化为灰度图像

    本文将从多个方面详细阐述如何使用Python将图像转化为灰度图像,包括图像的概念、灰度图像的概念、Python库的使用以及完整的Python代码实现。 一、图像与灰度图像 图像是指…

    编程 2025-04-28
  • 图像与信号处理期刊级别

    本文将从多个方面介绍图像与信号处理期刊级别的相关知识,包括图像压缩、人脸识别、关键点匹配等等。 一、图像压缩 图像在传输和存储中占据了大量的空间,因此图像压缩成为了很重要的技术。常…

    编程 2025-04-28
  • Opencv 实现读取 BMP 图片

    Opencv 是一个基于 C/C++ 语言的开源计算机视觉库,可以用于图像处理、特征识别、目标跟踪、机器学习等领域。在图像处理中,读取 BMP 图片是常见操作之一。 一、打开 BM…

    编程 2025-04-27
  • opencv鼠标绘图

    本文将为您详细介绍如何使用opencv在原始图片上进行鼠标绘图。 一、准备工作 在开始绘制之前,您需要先准备好以下的工作: 1、安装opencv库,可以通过pip install …

    编程 2025-04-27

发表回复

登录后才能评论