关于图像处理中 常用到的RGB、HSV、CIELab三种颜色空间的相关知识,在这里向大家推荐两篇讲得比较好的博客:RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解以及彻底搞懂Lab 颜色空间。在本文中,主要利用Opencv来对图像在三个空间中的转换关系进行举例。
RGB颜色空间:最常用的图像颜色表示空间,RGB颜色空间代表了图像的红(Red)、绿(Green)、蓝(Blue)三个颜色通道,三通道的取值范围为0-255,所以我们常见的彩色图像经常使用24位(3*8)进行表示。
HSV颜色空间:人类视觉观感最强的颜色空间(该空间上的颜色变化人类最容易进行区分),其中H
(Hue)代表色调,表达了图像的颜色更偏向于哪种颜色
,在HSV颜色空间中,该分量用角度
进行表示,取值范围为0-360°(其中0°代表红色,120°代表绿色,240°代表蓝色
。)S
(Saturation)代表饱和度,其具体表示了某种颜色(H所代表的颜色)的深浅程度
,其组成是由标准的光谱色和白色进行混合而成的。其取值范围为0-1
。V
(Value)表示了某种颜色的明暗程度(亮度大小),其取值范围也为0-1
。关于HSV颜色空间的具体数学模型(为一个圆锥形,HSV分别从圆锥的三个维度描述了颜色的变化范围),具体见RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解这篇博客。
CIELab颜色空间:其最大的特点是图像的色彩属性不会因为其显示设备的不同而发生改变。这是在图像处理中经常用到其的最重要的原因。在该颜色空间中,主要有三个颜色分量:L,a,b。其中,L
代表图像的亮度变化
,取值范围为0-100
,数值越大,图像的亮度越高。其中,0代表黑色,100代表白色。a和b都代表颜色的变化,二者的取值范围为-100–100/-128-127。当a
由负到正变化时,颜色由绿
色变
到红色
,b
由负到正变化时,颜色由蓝
色变
为黄色
。当a和b都为0时,代表灰色
。在CIELab颜色空间中,所有的颜色的定义都是相对于白色点定义的。具体详细解释参见博客:彻底搞懂Lab 颜色空间。
本文以Opencv为工具,将以上三种颜色空间的图像转换表示如下:
import cv2
import matplotlib.pyplot as plt
filename='0.jpg'
img_rgb=cv2.imread(filename)
img_hsv=cv2.cvtColor(img_rgb,cv2.COLOR_BGR2HSV)
img_CIELab=cv2.cvtColor(img_rgb,cv2.COLOR_BGR2LAB)
cv2.namedWindow('RGB_Space',0)
cv2.imwrite('0_hsv.jpg',img_hsv)
cv2.imwrite('0_CIELab.jpg',img_CIELab)
cv2.namedWindow('HSV_Space',0)
cv2.namedWindow('CIELab_Space',0)
cv2.imshow('RGB_Space',img_rgb)
cv2.imshow('HSV_Space',img_hsv)
cv2.imshow('CIELab_Space',img_CIELab)
cv2.waitKey(0)
运行结果如下:
具体如下所示:
HSV空间:
CIELab空间:
BUG:不晓得咋回事儿,原来的RGB图片上传不上去。。。。大家将就着看运行结果中的RGB图像吧。。。