OpenCV学习笔记【二】imshow函数、namedWindow函数、imwrite函数

本文介绍了OpenCV中的三个重要函数。imshow()函数用于在指定窗口显示图像,会根据窗口标志和图像深度决定是否缩放;namedWindow()函数用于创建窗口,在需提前使用窗口名时必要;imwrite()函数用于将图像保存到指定文件,图像格式基于文件扩展名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.imshow()函数

imshow()函数用于在指定的窗口显示一幅图像,函数原型如下:

void imshow(const string& winname, InputArray mat);

  • 第一个参数:const string&类型的winname,填需要显示的窗口标识名称。
  • 第二个参数:InputArray类型的mat,填需要显示的图像。

imshow函数用于在指定的窗口显示图像。如果窗口是用CV_WINDOW_AUTSIZE(默认值)标志创建的,那么显示图像原始大小。否则将图像进行缩放成合适窗口。而imshow函数缩放图像,取决于图像的深度。

2.namedWindow()函数

namedWindow函数用于创建一个窗口,若是简单地进行图片显示,可以略去namedWindow函数的调用,即先调用imread读入图片,然后用imshow直接指定出窗口名进行显示即可。但需要在显示窗口之前就用到窗口名时,比如滑动条的使用,要指定滑动条依附到某个窗口上,就需要nameWindow函数先创建窗口,显示地规定窗口名称了。nameWindow函数原型如下:

void nameWindow(const string& winname, int flags=WINDOW_AUTOSIZE);

  • 第一个参数,const string&类型的name,填写被用作窗口的标识符的窗口名称。
  • 第二个参数,int类型的flags,窗口的标识。

nameWindow函数的作用是通过指定的名字,创建一个可以作为图像和进度条的容器窗口,如果具有相同的名称的窗口已经存在,则函数不做任何事情。

3.imwrite()函数

在OpenCV中,输出图像到文件一般采用imwrite函数,它的声明如下:

bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() );

  • 第一个参数,const string&类型的filename,填需要写入的文件名。注意要带上后缀,如“123.jpg”。
  • 第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据。
  • 第三个参数,const vector<int>&类型的params,表示为特定格式保存的参数编码。它有默认值vector<int>(),所以一般情况下不需要填写

imwrite函数用于将图像保存到指定的文件。图像格式是基于文件扩展名的,可保存的扩展名和imread中可以读取的图像扩展名一致。

 

 

 

 

 

 

 

 

 

### OpenCV C++ 学习教程概述 OpenCV 是一个强大的开源计算机视觉库,支持多种编程语言,其中 C++ 是其主要开发语言之一。以下是关于如何通过 OpenCV 的 C++ 功能进行学习的相关资源和知识点。 #### 图像基本操作 图像的基本读取、显示以及保存功能是 OpenCV 中最基础的部分。可以通过 `imread` 函数加载图片,并利用 `imshow` 和 `imwrite` 来展示和存储处理后的结果[^1]。 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("example.jpg"); if (image.empty()) return -1; namedWindow("Example", WINDOW_AUTOSIZE); imshow("Example", image); waitKey(0); // Wait for key press imwrite("output_image.png", image); } ``` #### 图像融合技术 为了实现两幅图像的平滑过渡或者叠加效果,可以使用 `addWeighted()` 方法完成加权平均混合的操作[^2]。此方法接受两个输入矩阵及其权重参数 α 和 β,还有一个偏移量 γ。 ```cpp Mat blendedImage; double alpha = 0.7; double beta = 0.3; double gamma = 0.0; addWeighted(src1, alpha, src2, beta, gamma, blendedImage); ``` #### 腐蚀与膨胀操作 形态学中的腐蚀(Erosion)和膨胀(Dilation)用于改变值化图像中对象形状大小。这些变换通常依赖于结构元素(Kernel)。创建自定义核可通过调用 `getStructuringElement` 完成[^3]。 ```cpp Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(5, 5)); erode(image, erodedImage, kernel); dilate(erodedImage, dilatedImage, kernel); ``` #### 形态学高级应用——顶帽黑帽运算 除了简单的腐蚀膨胀外,还有更复杂的形态学转换如顶帽(Tophat)和黑帽(Blackhat),分别提取亮区域细节或暗区域特征[^4]。具体表达式如下所示: - **TopHat**: \(dst = src - open(src)\) - **BlackHat**: \(dst = close(src) - src\) ```cpp morphologyEx(image, topHatResult, MORPH_TOPHAT, kernel); morphologyEx(image, blackHatResult, MORPH_BLACKHAT, kernel); ``` 以上内容涵盖了从入门到深入理解 OpenCV 库所需掌握的核心概念和技术要点。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值