【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点

1. RGB颜色模型:是最常见的颜色空间模型,分别代表了Red(红),Green(绿)和Blue(蓝)。其模型可以从下图理解:

【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点_第1张图片

       灰度线:坐标轴远点到白色顶点的连线被称为灰度线。

2. CYMK颜色模型:是RGB的补色模型。是一种专门针对印刷的模型,因为与光线相反,印刷是反射效果,看到的红色其实是将其它光吸收掉,反射红光。

补色:某种颜色的光与另一种颜色的光混合可以形成白光,则互为补色。

3. HSV颜色模型:Hue, Saturation, Value色调饱和度明度)。

· HSV颜色模型也称为六角锥体模型(Hexcone Model)。

· 色调用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色绿色120°蓝色240°。它们的补色是:黄色60°青色180°品红300°

· 饱和度:表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%值越大,颜色越饱和

· 明度:表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

4. HSI颜色模型Hue-Saturation-Intensity色调饱和度亮度)。

· 色调H是描述纯色的属性(如红色、黄色等)。

· 饱和度S表示的是一种纯色被白光稀释的程度的度量。

· 亮度提现了无色的,这是一个主观的描述。

· 与RGB换算关系

【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点_第2张图片

5. 代码说明:

1) 同样光强的图像,人眼对绿色最敏感的,对蓝色最不敏感的。

2) 白色与透明没有任何关系。在Microsoft的Photoshop等软件中,除了RGB三通道之外还有一个α通道,代表的是透明度。这个可以类似的理解为在图像上还有一个掩膜。

3) HSI模型HSV模型是两种不同的模型,具体信息如上所述。HSI模型更贴近人类视觉感觉,但是在OpenCV中仅支持HSV模型

4) PyrDown函数对图像进行滤波然后进行下采样

void pyrDown (InputArray src,OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT)

void pyrDown (输入图像,输出图像,输出图像的大小,图像边界的处理方式)

操作过程

 i. 与高斯内核卷积;

 ii. 将所有偶数行和列去除。

5) PyrUp函数对图像进行高斯滤波,然后进行上采样。

void pyrUp(InputArray src,OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT)

void pyrDown (输入图像,输出图像,输出图像的大小,图像边界的处理方式)

操作过程:与pyrDown类似,但是上采样是下采样的逆过程,也称增取样Upsampling)或内插(Interpolating)。

6) 颜色空间转换cvtColor函数):

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

code: COLOR_BGR2GRAYCOLOR_BGR2HSV

Ÿ   通道分离split函数):

void split (const Mat &src, Mat *mvBegin);

/* ************************************************************************************************************
                                    
				任务目标:通过OpenCV观察HSV颜色模型的特点。

************************************************************************************************************ */

#include                       // 声明头文件
#include 

using namespace cv;                      // 声明命名空间
using namespace std;

int main(void)                                 // 主函数
{
	char *fn = "E:\\Study\\Computer vision\\OpenCV Test Workshop\\HSVtest\\opencv-logo.png";
	                                                   // 定义指针"*fn"指向目标图像
	Mat image1 = imread(fn);          // 从"*fn"指针中读取目标图像并放入"image1"变量中

	Mat image, gray, hsv, hsvChannels[3];  // 声明"Mat"型变量,包括一个数组空间存放"hsv"分量结果
	pyrDown(image1, image);          // 对图像进行滤波,然后进行下采样
	cvtColor(image, gray, COLOR_BGR2GRAY);  // 转换到灰度颜色空间

	imshow("Source Image", image);  // 显示"pyrDown"的结果
	imshow("Gray", gray);                 // 显示灰度图像

	cvtColor(image, hsv, COLOR_BGR2HSV);  // 转换到"HSV"颜色模型
	split(hsv, hsvChannels);               // 分离"HSV"颜色模型中的三个分量通道对应的值
	
	imshow("Hue", hsvChannels[0]);  // 显示"色调"分布图
	imshow("Saturation", hsvChannels[1]);  // 显示"饱和度"分布图
	imshow("Value",hsvChannels[2]);  // 显示"明度"分布图
	
	waitKey();                                     // 暂停程序,防止闪退

	return (0);
}
结果输出如下:

【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点_第3张图片

在pyrDown函数中进行了下采样,缩小了图像。

【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点_第4张图片

灰度化处理了的图像,因为人眼对不同色彩敏感度不同,得到的灰度值也不同。

【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点_第5张图片

底色为黑色,且色调按角度划分,红色为0°,绿色120°,蓝色240°。

【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点_第6张图片

因为三个“环”都是纯色,自然饱和度都是100%。

【碎片知识(4)· 计算机视觉基础】借助OpenCV探究HSV图像空间中各分量的特点_第7张图片

亮度为100%。

你可能感兴趣的:(OpenCV,计算机视觉)