前言
最近心血来潮,想具体的去学习一下图像处理,所以报了知识星球的一个OpenCV研习社,将自己每天的学习,分享一下。写个 blog 加深一下知识。
一、 函数解析
1、cvtColor(色彩空间转换)
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
参数一:输入的图片
参数二:输出的图片(大小和深度和输入图片一致)
参数三:色彩空间转换码
参数四:目标图像中的通道数; 如果参数为0,则从输入图片(src)和色彩空间转换码(code)自动导出通道数。
下面列出一些常见的色彩空间转换码
属性 | 数值 | 样式 |
---|---|---|
COLOR_BGR2GRAY | 6 | 彩色到灰度 |
COLOR_GRAY2BGR | 8 | 灰度到彩色 |
COLOR_BGR2HSV | 40 | BGR到HSV |
COLOR_HSV2BGR | 54 | HSV到 BGR |
2、imwrite(保存图片)
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
const std::vector<int>& params = std::vector<int>());
参数一:文件名
参数二:需要保存的图片
参数三:特定格式的参数(可省略)
列出参数三的一些格式:
属性 | 数值 | 样式 |
---|---|---|
IMWRITE_JPEG_QUALITY | 1 | 对于JPEG,它可以是从0到100的质量(越高越好)。默认值为95。 |
IMWRITE_JPEG_PROGRESSIVE | 2 | 启用JPEG功能,0或1,默认为False。 |
IMWRITE_JPEG_OPTIMIZE | 3 | 启用JPEG功能,0或1,默认为False。 |
IMWRITE_JPEG_RST_INTERVAL | 4 | JPEG重启间隔,0 - 65535,默认为0 - 无重启。 |
IMWRITE_JPEG_LUMA_QUALITY | 5 | 单独的亮度质量等级,0 - 100,默认为0 - 不使用。 |
IMWRITE_JPEG_CHROMA_QUALITY | 6 | 单独的色度质量等级,0 - 100,默认为0 - 不使用。 |
IMWRITE_PNG_COMPRESSION | 16 | 对于PNG,它可以是从0到9的压缩级别。值越高意味着更小的尺寸和更长的压缩时间。默认值为3。 |
IMWRITE_PNG_STRATEGY | 17 | cv :: ImwritePNGFlags之一,默认为IMWRITE_PNG_STRATEGY_DEFAULT。 |
IMWRITE_PNG_BILEVEL | 18 | 二进制级别PNG,0或1,默认为0。 |
IMWRITE_PXM_BINARY | 32 | 对于PPM,PGM或PBM,它可以是二进制格式标志,0或1.默认值为1。 |
IMWRITE_WEBP_QUALITY | 64 | 对于WEBP,它可以是1到100的质量(越高越好)。默认情况下(不带任何参数),如果质量高于100,则使用无损压缩。 |
二、示例
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
//读取图片
Mat src = imread("F:\\Cvimage\\test.png");
if (src.empty())
{
printf("could not load image!\n");
return -1;
}
namedWindow("input1", WINDOW_AUTOSIZE);
imshow("input1", src);
Mat gray;
//这里将原图转为灰色
cvtColor(src, gray, COLOR_BGR2GRAY);
//将转换后的图片保存
imwrite("F:\\Cvimage\\gray.png",gray);
//显示一下转换后的图片
namedWindow("input2", WINDOW_AUTOSIZE);
imshow("input2", gray);
waitKey(0);
return 0;
}
三、结果
女神镇楼!
原图:
四、官方教程
传送门:官方教程 ---- imwrite
传送门:官方教程 ---- cvtColor