1.介绍
在图像处理中,我们会遇到各式各样的颜色空间,比如RGB、HLS、HSV、HSB、YCrCb、CIE XYZ、CIE Lab ,那么它们的区别和应用场所又在哪里呢?
1)RGB是生活中最常见的颜色空间,其中,R代表红色通道,G代表绿色通道,B代表蓝色通道,它们之间的相互搭配组合256*256*256,几乎可以包括人类视力所能感知的所有颜色。应用场所:一般的彩色图片都是用RGB三通道来表示,另外,在深度学习领域,很多图片的输入也是RGB三通道的,比如目标跟踪、图像超分等。
2)在HLS颜色空间里,其中,H代表色相通道,L代表饱和度通道,S代表亮度通道
3)HSV、HSB是同样的一个颜色空间,其中,H代表色相,S代表饱和度,V代表明度。如果我们不仔细辨别HSV和HSB,如果它们就是一个东西,在原理和表现上,HSL 和 HSB 中的 H(色相) 完全一致,但二者的 S(饱和度)不一样, L 和 B (明度 )也不一样:
- HSB 中的 S 控制纯色中混入白色的量,值越大,白色越少,颜色越纯;
- HSB 中的 B 控制纯色中混入黑色的量,值越大,黑色越少,明度越高
- HSL 中的 S 和黑白没有关系,饱和度不控制颜色中混入黑白的多寡;
- HSL 中的 L 控制纯色中的混入的黑白两种颜色。
另外,有了RGB通道,又为什么要引入HSL和HSB通道呢?因为,人去描述一个颜色的时候,不仅仅会说是什么颜色,也会说其明暗,因此他们的应用场景常见如艺术家,此时,我在想,通过深度学习做的风格转移,如果用此通道作为输入,其结果又会怎么样呢?
4)YCrCb,它的另外一个大名是YUV,其中,其中“Y”表示明亮度,也就是灰阶值;而“U”和“V” 表示的则是色度,作用是描述影像色彩及饱和度,用于指定像素的颜色。YUV常用于视频传输中,而且有一个很好的优点是可以兼容黑白电视机(只传Y通道即可)
5)在CIE XYZ颜色空间里面,其中X、Y、Z是R、G、B的线性变换的结果,因为Y不仅仅包含绿色,并且由于人眼感受绿色,要比红色和蓝色要亮,因此Y也被定义为亮度。其作用就是在RGB系统的基础上,用数学方法,选用三个理想的原色来代替实际的三原色,从而将CIE-RGB系统中的光谱三刺激值和色度坐标r、g、b均变为正值
6)在CIE Lab颜色通道里面,它由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。这个颜色通道是不依赖光线,也不依赖于颜料
2.代码
import matplotlib.pyplot as plt
import cv2
img_bgr = cv2.imread('kodim04.png') # BGR
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
plt.subplot(2, 3, 1)
plt.imshow(img_rgb);
plt.axis('off');
plt.title('RGB')
img_hls = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HLS)
plt.subplot(2, 3, 2)
plt.imshow(img_hls);
plt.axis('off');
plt.title('HLS')
img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
plt.subplot(2, 3, 3)
plt.imshow(img_hsv);
plt.axis('off');
plt.title('HSV')
img_yuv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YUV)
plt.subplot(2, 3, 4)
plt.imshow(img_yuv);
plt.axis('off');
plt.title('YUV')
img_xyz = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2XYZ)
plt.subplot(2, 3, 5)
plt.imshow(img_xyz);
plt.axis('off');
plt.title('XYZ')
img_lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)
plt.subplot(2, 3, 6)
plt.imshow(img_lab);
plt.axis('off');
plt.title('LAB')
plt.show()
3.效果
4.参考资料
颜色空间(HSV/HSB与HLS)的区别_hsv空间_大写的ZDQ的博客-CSDN博客
百度百科