一.色彩空间基础
色彩空间类型装换是指将图像从一个色彩空间转化到另一个色彩空间。常见的色彩空间包括GRAY色彩空间,XYZ色彩空间,YCrCb色彩空间,HSV色彩空间,HLS色彩空间,CIELab色彩空间,CIELuv*色彩空间,Bayer色彩空间。
1.GRAY色彩空间
灰度图像,通常是8bit灰度级,灰度值范围为0~255。当图像从RGB色彩空间转化为GRAY色彩空间时,标准的转化方式,同时也是Opencv中转化方式如下:
Gray=0.299*R+0.587*G+0.114*B
有时也可以采用简单的转化方式:
Gray=(R+G+B)/3
当将灰度图像转化为RGB色彩空间时,最终三个通道值是相等的,都等于灰度图像中的像素值,转化方式:
B=Gray
G=Gray
R=Gray
2.XYZ色彩空间
XYZ色彩空间与RGB色彩空间之间转换非常简单,只需乘一个转换矩阵即可。
3.YCrCb色彩空间
人眼对颜色的敏感度低于对亮度敏感度,在RGB色彩空间中三通道代表三种不同的颜色,三种颜色具有相同的重要性,却忽略了亮度的信息,所以在YCrCb色彩空间中,Y代表亮度信息,Cr代表红色分量,Cb代表蓝色分量。
4.HSV色彩空间
HSV色彩空间分别代表色调(Hue,光的颜色),饱和度(saturation,色彩的深浅),亮度(value,人眼感受到的光的明暗程度)。
二.类型转换函数
在Opencv中,我们使用cv2.cvtColor()函数来实现不同类型的色彩空间转换。语法格式如下:
dst=cv2.cvtColor(src,code[,dstCn])
参数说明:
dst:输出图像,与输入图像具有同样的规格大小。
src:输入原始图像图像。
code:色彩转换编码。
dstCn:目标图像通道数,一般可以省略,其自动可以得到。
code的一般的格式为cv2.COLOR_(原始图像色彩空间)2(目标图像色彩空间)
如:从RGB色彩空间转化为GRAY色彩空间,编码为cv2.COLOR_BGR2GRAY;
从GRAY转化为BGR,编码为cv2.COLOR_GRAY2BGR。
import cv2
#原始图像为BGR
image_BGR=cv2.imread("color_2.png")
#BGR转换为GRAY
image_GRAY=cv2.cvtColor(image_BGR,cv2.COLOR_BGR2GRAY)
#BGR转化为RGB
image_RGB=cv2.cvtColor(image_BGR,cv2.COLOR_BGR2RGB)
cv2.imshow("BGR",image_BGR)
cv2.imshow("GRAY",image_GRAY)
cv2.imshow("RGB",image_RGB)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
三.alpha通道
在常见的RGB三通的基础上还可以加一个A通道,表示透明度。此时的色彩空间被称为RGBA色彩空间。alpha通道的赋值范围为01或1255,从透明到不透明,值越大越不透明。
实例:
import cv2
#原始图像为BGR
image_BGR=cv2.imread("color_2.png")
#转换为BGRA
image_BGRA=cv2.cvtColor(image_BGR,cv2.COLOR_BGR2BGRA)
b,g,r,a=cv2.split(image_BGRA)
a[:,:]=125
bgra_125=cv2.merge([b,g,r,a])
a[:,:]=0
bgra_0=cv2.merge([b,g,r,a])
cv2.imshow("BGR",image_BGR)
cv2.imshow("BGRA_255",image_BGRA)
cv2.imshow("BGRA_125",bgra_125)
cv2.imshow("BGRA_0",bgra_0)
cv2.imwrite("bgra_0.png",bgra_0)
cv2.imwrite("bgra_125.png",bgra_125)
cv2.imwrite("bgra_255.png",image_BGRA)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
四幅图像基本无差别,但观察存储的三幅图像,差别明显。
bgra_255
bgra_125
bgra_0
bgra_0就什么都看不到,一片白板。