(C++) OPENCV零基础学习基础函数

本文是关于OPENCV库的基础教程,详细介绍了读取与保存图像、灰度处理、通道分离、二值化处理、滤波操作(包括高斯滤波和双边滤波)以及形态学操作等核心函数的使用方法。通过实例解析参数设置,帮助初学者掌握OPENCV的基本图像处理技巧。
摘要由CSDN通过智能技术生成

OPENCV study

读取图像imread()
void cv::imread(const string& filename, int flags = IMREAD_COLOR )

参数说明:

filename 要加载的文件名。
flags 可以采用cv::ImreadModes值的标志,默认为cv::IMREAD_ANYOLOR。

cv::imread() 读取任意路径的图像

namedWindow() 定义一个显示窗口名 (WINDOW_AUTOSIZE) 显示图像

保存图像:imwrite()
void cv::imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() )

参数说明:

filename:需要写入的文件名,会自己创建(像imwrite(“1.jpeg”,src);这样)

img:要保存的图像

params:表示为特定格式保存的参数编码,它有默认值std::vector<int>(),所以一般情况下不需要填写。如果更改的话,对于不同的图片格式,其对应的值不同功能不同

注意事项:

你要保存图片为哪种格式,就带什么后缀。

imwrite("*.jpg",frame);//将摄像头获取的图像帧frame保存到文件中
imwrite函数是基于文件扩展名选择图像的格式。通常,使用此功能只能保存8位单通道或3通道(带有BGR通道顺序)图像,但有以下例外:

对于PNG,JPEG2000和TIFF格式,可以保存16位无符号(CV_16U)图像。
32位浮点(CV_32F)图像可以保存为PFM,TIFF,OpenEXR和Radiance HDR格式; 使用LogLuv高动态范围编码(每像素4个字节)保存3通道(CV_32FC3)TIFF图像
可以使用此功能保存带有Alpha通道的PNG图像。为此,创建8位(或16位)4通道图像BGRA,其中alpha通道最后。完全透明的像素应该将alpha设置为0,完全不透明的像素应该将alpha设置为255/65535。
如果格式,深度或通道顺序不同,请在保存之前使用Mat :: convertTo和cv :: cvtColor进行转换。或者,使用通用FileStorage I / O函数将图像保存为XML或YAML格式。

补充说明:

对于params也有特殊的:第3个变量有3个定义:
CV_IMWRITE_JPEG_QUALITY
CV_IMWRITE_PNG_COMPRESSION
CV_IMWRITE_PXM_BINARY
分别对应JPEG 、PNG、 PPM, PGM, or PBM

对于JPEG格式的图片
这个参数表示从0-100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95.

对于PNG格式的图片
这个参数表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0-9.较高的值意味着更小的尺寸和更长的压缩时间而默认值是3.

对于PPM,PGM或PBM格式的图片
这个参数表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或1,而默认值为1.

灰度处理:cvColor()

cvtColor( cv::image; cv::iamge)

void cv::cvtColor	(	InputArray 	src,
                         OutputArray 	dst,
                       int 	code,
                      int 	dstCn = 0 
                      )	

参数说明:

src:输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一(输入的 8-bit , 16-bit 或 32-bit 单倍精度浮点数影像)

dst:即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到与输入图像有相同的类型和尺寸的目标图。(输入的 8-bit , 16-bit 或 32-bit 单倍精度浮点数影像)

code:

RGB <--> BGR:CV_BGR2BGRA、CV_RGB2BGRA、CV_BGRA2RGBA、CV_BGR2BGRA、CV_BGRA2BGR

RGB <--> 5X5:CV_BGR5652RGBA、CV_BGR2RGB555、(以此类推,不一一列举)

RGB <---> Gray:CV_RGB2GRAY、CV_GRAY2RGB、CV_RGBA2GRAY、CV_GRAY2RGBA

RGB <--> CIE XYZ:CV_BGR2XYZ、CV_RGB2XYZ、CV_XYZ2BGR、CV_XYZ2RGB

RGB <--> YCrCb(YUV) JPEG:CV_RGB2YCrCb、CV_RGB2YCrCb、CV_YCrCb2BGR、CV_YCrCb2RGB、CV_RGB2YUV(将YCrCb用YUV替代都可以)

RGB <--> HSV:CV_BGR2HSV、CV_RGB2HSV、CV_HSV2BGR、CV_HSV2RGB

RGB <--> HLS:CV_BGR2HLS、CV_RGB2HLS、CV_HLS2BGR、CV_HLS2RGB

RGB <--> CIE L*a*b*:CV_BGR2Lab、CV_RGB2Lab、CV_Lab2BGR、CV_Lab2RGB

RGB <--> CIE L*u*v:CV_BGR2Luv、CV_RGB2Luv、CV_Luv2BGR、CV_Luv2RGB

RGB <--> Bayer:CV_BayerBG2BGR、CV_BayerGB2BGR、CV_BayerRG2BGR、CV_BayerGR2BGR、CV_BayerBG2RGB、CV_BayerGB2RGB、 CV_BayerRG2RGB、CV_BayerGR2RGB(在CCD和CMOS上常用的Bayer模式)

YUV420 <--> RGB:CV_YUV420sp2BGR、CV_YUV420sp2RGB、CV_YUV420i2BGR、CV_YUV420i2RGB

OPENCV默认图片通道顺序是BGR,而不是RGB。

opencv cvtcolor支持的空间转发code,如下

cv::ColorConversionCodes { 
  cv::COLOR_BGR2BGRA = 0, 
  cv::COLOR_RGB2RGBA = COLOR_BGR2BGRA, 
  cv::COLOR_BGRA2BGR = 1, 
  cv::COLOR_RGBA2RGB = COLOR_BGRA2BGR, 
  cv::COLOR_BGR2RGBA = 2, 
  cv::COLOR_RGB2BGRA = COLOR_BGR2RGBA, 
  cv::COLOR_RGBA2BGR = 3, 
  cv::COLOR_BGRA2RGB = COLOR_RGBA2BGR, 
  cv::COLOR_BGR2RGB = 4, 
  cv::COLOR_RGB2BGR = COLOR_BGR2RGB, 
  cv::COLOR_BGRA2RGBA = 5, 
  cv::COLOR_RGBA2BGRA = COLOR_BGRA2RGBA, 
  cv::COLOR_BGR2GRAY = 6, 
  cv::COLOR_RGB2GRAY = 7, 
  cv::COLOR_GRAY2BGR = 8, 
  cv::COLOR_GRAY2RGB = C
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值