文章目录
cpp
void QuickDemo::colorSpce_Demo(cv::Mat &image)
{
cv::Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
cvtColor(image, gray, COLOR_RGB2GRAY);
imshow("hsv", hsv);
imshow("gray", gray);
imwrite("./hsv.png",hsv);
imwrite("./gray.png", gray);
}
一、cvColor
cvtColor函数是OpenCV库中的一个函数,用于图像颜色空间的转换。它可以将一个图像从一个颜色空间转换为另一个颜色空间,比如将彩色图像转换为灰度图像、将BGR图像转换为HSV图像等
cpp
cv::cvtColor(src, dst, code, dstCn);
-
src:输入图像,可以是一个三通道的彩色图像或者一个单通道的灰度图像。
-
dst:输出图像,转换后的图像将存储在这里。
-
code:颜色空间转换代码,指定要进行的转换类型。具体的转换类型可以通过 cv::ColorConversionCodes 枚举类中的常量来指定。常见的转换类型包括:
cv::COLOR_BGR2GRAY:BGR彩色图像到灰度图像的转换。
cv::COLOR_BGR2HSV:BGR彩色图像到HSV彩色图像的转换。
cv::COLOR_BGR2RGB:BGR彩色图像到RGB彩色图像的转换。
cv::COLOR_GRAY2BGR:灰度图像到BGR彩色图像的转换。
-
dstCn:输出图像的通道数,如果为0,则根据 code 参数自动确定通道数。
注意事项:
- 输入图像和输出图像应该具有相同的尺寸
- 如果输入图像是彩色图像,而输出图像是灰度图像,则输出图像只有一个通道
- 如果输入图像是灰度图像,而输出图像是彩色图像,则输出图像的通道数由 dstCn 参数指定
二、HSV/BGR
HSV(Hue-Saturation-Value)和BGR(Blue-Green-Red)是两种常用的颜色表示方式,用于描述彩色图像中的像素颜色。
BGR颜色空间是计算机图形学中最常用的颜色空间之一。在BGR颜色空间中,每个像素由三个分量表示:蓝色(Blue)、绿色(Green)和红色(Red)。对于8位BGR图像,每个分量的取值范围是0到255,其中0表示最小强度或没有该颜色,255表示最大强度或完全饱和的颜色。
相比之下,HSV颜色空间将颜色表示为更直观和易于理解的方式。它包含以下三个主要分量:
-
色调(Hue):表示颜色的类型或种类。在HSV圆柱体中,色调沿着圆周方向变化,从0到360度。常见的色调表示如下:
红色位于0度或360度
黄色位于60度
绿色位于120度
青色位于180度
蓝色位于240度
洋红色位于300度
-
饱和度(Saturation):表示颜色的鲜艳程度或纯度。较高的饱和度表示颜色更鲜艳,而较低的饱和度表示颜色更接近灰色。饱和度的取值范围通常是0到1,也可以是0到100。
-
值(Value):表示颜色的亮度或明暗程度。较高的值表示颜色更亮,而较低的值表示颜色更暗。值的取值范围通常是0到1,也可以是0到100。
HSV颜色空间的转换可以通过OpenCV中的cvtColor函数来实现,使用的转换代码是cv::COLOR_BGR2HSV。
三、imwrite
imwrite函数是OpenCV库中用于将图像写入文件的函数。它可以将一个图像保存为指定格式的图像文件。
cpp
bool cv::imwrite(const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());
参数解释如下:
- filename:要保存的图像文件的路径和名称。
- img:要保存的图像,可以是 cv::Mat 类型的图像对象。
- params:保存图像的参数,是一个可选的参数。它是一个包含键值对的整数向量,用于指定保存图像的特定参数。常用的参数包括:
CV_IMWRITE_JPEG_QUALITY:JPEG格式图像的质量,取值范围为0到100,默认为95。
CV_IMWRITE_PNG_COMPRESSION:PNG格式图像的压缩级别,取值范围为0到9,默认为3。
CV_IMWRITE_WEBP_QUALITY:WebP格式图像的质量,取值范围为0到100,默认为80。
返回值为布尔类型,表示图像是否成功保存到文件中
推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:
C++初级课程链接:
https://ke.qq.com/course/444655?flowToken=1043280