目录
最近遇到很多颜色空间格式之间的互相转换,不清楚具体是什么含义,如BGR555、YCrCb、HLS、Luv、HSV、Lab、XYZ、Bayer等。
图像通道划分
单通道(灰度图)
- 单通道图像只有一个颜色分量,通常用于表示灰度图像。灰度图是一种只包含亮度信息的图像,每个像素通常用一个字节(8位)表示,其取值范围是0 - 255,0表示黑色,255表示白色。
三通道(RGB、BGR等)
- 三通道图像是最常见的彩色图像表示形式,如RGB(红、绿、蓝)和BGR(蓝、绿、红)
- 每个通道的值表示相应颜色分量的强度,范围通常是0 - 255。例如,在RGB图像中,一个像素点的值为(255, 0, 0)表示纯红色,(0, 255, 0)表示纯绿色,(0, 0, 255)表示纯蓝色。
- 在OpenCV中,默认读取的彩色图像是BGR格式。
四通道(RGBA、BGRA等)
- 在三通道的基础上增加了一个Alpha通道,用于表示透明度。Alpha通道的值范围也是0 -255,其中0表示完全透明,255表示完全不透明。
- BGRA(Blue - Green - Red - Alpha)是一种图像像素格式。其中B代表蓝色通道,G代表绿色通道,R代表红色通道,A代表透明度通道。每个通道通常用一个字节(8位)表示,所以一个BGRA像素共占用32位(4个字节)。
其他颜色编码格式或颜色空间
RGB565、RGB555
- RGB565是一种16位的RGB颜色编码格式。在RGB565格式中,“RGB”代表红(Red)、绿(Green)、蓝(Blue)三个颜色通道。其中红色通道(R)占用5位,这意味着它可以表示32种不同的红色强度值。绿色通道(G)占用6位,蓝色通道(B)占用5位。
- RGB565将三个颜色通道的数据存储在一个16位的无符号整数中。通常按照高位到低位的顺序,先是红色通道的5位数据,然后是绿色通道的6位数据,最后是蓝色通道的5位数据。
- 例如,一个RGB565格式的颜色值0x1F3E1F
- 由于RGB565格式使用16位来表示一个像素的颜色,相比于24位(RGB888,每个通道8位)的真彩色格式,它占用的存储空间更少。
XYZ
- 在色彩科学领域,XYZ是一种与颜色表示相关的色彩空间。XYZ色彩空间是一种基于人眼视觉特性的绝对色彩空间,它是由国际照明委员会(CIE)定义的。它旨在提供一种与设备无关的颜色表示方法,通过三个坐标值(X、Y、Z)来描述颜色。
- 在进行跨设备的颜色管理时,将图像从设备相关的RGB色彩空间转换到XYZ色彩空间,然后再转换到目标设备的RGB色彩空间,可以确保颜色在不同设备上的一致性。
YCbCr颜色空间
在YCbCr空间中,Y表示亮度分量,Cb和Cr表示色度分量
Bayer模式
- Bayer模式是一种常见的图像传感器的色彩滤波阵列(CFA)模式。在Bayer模式下,图像传感器的每个像素点只采集一种颜色信息(红、绿或蓝),其中绿色像素的数量通常是红色或蓝色像素数量的两倍,这是因为人眼对绿色更敏感。常见的Bayer模式有Bayer BG(蓝 - 绿顺序)等不同排列方式
- 由于Bayer模式下的图像每个像素只有一种颜色信息,而RGB图像每个像素包含红、绿、蓝三种颜色信息,所以需要将Bayer BG图像转换为RGB图像才能在大多数显示设备上正常显示或者进行进一步的图像处理,如色彩校正、图像增强等操作。
转换结果
BGR2YCrCb=>
BGR2XYZ=>
BGR2HSV=>
BGR2Lab=>
BGR2Luv=>
BGR2HLS=>
OpenCV的常用颜色空间转换
OpenCV中有8种色彩空间,即RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab。
# 通过cv2.cvtColor()函数可以改变图像的色彩空间
cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)