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