网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
如图所示,某一像素的H可以由该点与白色基准线所形成的圆心角表示,H的取值范围为[0,360];某一点的S可以由该点与所在圆面的圆心之间的距离表示,距离越大,饱和度越高,反之越低;某一点的V可以由该点所在圆面与圆锥顶部之间的距离表示,距离越大,亮度越高,反之则越低。
RGB到HSV的转换公式如下:
HSV颜色空间不适合显示器系统,但是更符合人眼的视觉特性,因此通常会将颜色从RGB空间域转换到HSV颜色空间进行处理,然后在换回RGB域进行显示。
五、HSL颜色空间
HSL(色调、饱和度、亮度)空间,与HSV类似,只不过把V:Value替换为了L:Lightness。这两种表示在用途上类似,但在方法上有区别。
HSV和HSL二者在数学上都是圆柱,但HSV在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。注意尽管在HSL和HSV中“色调”指称相同的性质,它们的“饱和度”的定义是明显不同的。
RGB到HSL的转换公式如下:
六、Lab颜色空间
Lab颜色空间,弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。Lab颜色模型由三个要素组成:
- 亮度L,反映光线强度;取值0~100;
- 颜色通道a,a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);取值-128~127;
- 颜色通道b,是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值);取值-128~127。
这样规定是根据人类的视觉原理,灵长类动物的视觉都有两条通道:红绿通道和蓝黄通道,大多数动物最多只有一条通道,如果有人缺失其中一条,就是我们所说的色盲。
Lab模式对于PS极为重要,它是PS从一种颜色模式转换到另一种颜色模式的内部转化方式,PS从一种颜色模式转换到另一种颜色模式时,总是先转换到Lab模式。Lab色域是所有颜色模式中最宽广的,它囊括了RGB和CMYK的色域。
七、灰度颜色空间
很多类型的图像都没有色彩信息,只有亮度信息,通常使用灰度图表示,例如红外图像。灰度空间也是视觉机器学习任务中最基本的颜色空间。RGB空间转换为灰度空间的公式如下:
Y
=
0.299
×
R
0.587
×
G
0.114
×
B
Y = 0.299 \times R + 0.587 \times G + 0.114 \times B
Y=0.299×R+0.587×G+0.114×B
灰度空间转换为RGB空间的公式如下:
R
=
Y
,
G
=
Y
,
B
=
Y
R=Y, G=Y, B=Y
R=Y,G=Y,B=Y
八、颜色空间转换实战
cvtColor函数将输入的源图从某个颜色空间转换至另一个颜色空间。OpenCV的默认颜色空间为BGR,因此对于一个标准的3字节彩色图,第一个字节为8bit蓝色分量,第二个字节是8bit绿色分量,第三个字节是8bit红色分量。
cvtColor函数定义如下:
void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0)
各参数含义:
- src:输入图像,可以是8位无符号整型(CV_8U)、16位无符号整型(CV_16U)或单精度浮点型数据
- dst:输出图像,与输入图像的类型、大小和位深度均相等
- code:颜色空间转换码,指定颜色空间转换的类型
- dstCn:目标图像的通道数。当dstCn=0时,通道数将根据code与源图通道数自动确定
指定颜色空间转换的类型,将原图转换到不同的颜色空间,代码如下所示:
#include <iostream>
#include<opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("D:\\VSProject\\OpenCV4\\chap02\\lena.jpg", 1);
imshow("Original", img);
//imwrite("Original", img);
Mat img_gray, img_hsv, img_hsl, img_lab, img_rgb;
cvtColor(img, img_rgb, COLOR_BGR2RGB); //BGR转RGB
cvtColor(img, img_gray, COLOR_BGR2GRAY); //BGR转灰度图
cvtColor(img, img_hsv, COLOR_BGR2HSV); //BGR转HSV
cvtColor(img, img_lab, COLOR_BGR2Lab); //BGR转Lab
cvtColor(img, img_hsl, COLOR_BGR2HLS); //BGR转HSL
imshow("rgb", img_rgb);
imshow("gray", img_gray);
imshow("hsv", img_hsv);
imshow("lab", img_lab);
imshow("hsl", img_hsl);
waitKey(0);
return 0;
}
原图、RGB三通道图、灰度图如下所示:
HSV、HSL、Lab颜色空间下的图如下所示:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!