OpenCV学习之旅:图像的色彩空间转换
RGB图像是一种比较常见的色彩空间类型,除此之外,还有一些其他的色彩空间,例如GRAY色彩空间、YCrCb色彩空间、HSV色彩空间、HLS色彩空间等。每个色彩空间都有自己擅长的处理问题的领域,因此,为了更方便地处理某个具体问题,就要用到色彩空间类型的转换。色彩空间类型转换是指将图像从一个色彩空间转换到另外一个色彩空间。
色彩空间类型转换函数
在OpenCV中,cv2.cvtColor()函数用于实现色彩空间转换,其一般格式为:
1 | dst = cv2.cvtColor(src, code [, dstCn]) |
- dst表示与输入值具有相同类型和深度的输出图像。
- src表示原始输入图像。
- code是色彩空间转换码,常见的枚举值如表3-6所示。
- dstCn表示目标图像的通道数。
常用色彩空间转换码:
| 转换码 | 解释 |
|---|---|
cv2.cvtColor_BGR2RGB |
BGR色彩空间转RGB色彩空间 |
cv2.cvtColor_BGR2GRAY |
BGR色彩空间转GRAY色彩空间 |
cv2.cvtColor_BGR2HSV |
BGR色彩空间转HSV色彩空间 |
cv2.cvtColor_BGR2YCrCb |
BGR色彩空间转YCrCb色彩空间 |
cv2.cvtColor_BGR2RGB |
BGR色彩空间转BGR2RGB色彩空间 |
cv2.cvtColor_BGR2HLS |
BGR色彩空间转HLS色彩空间 |
RGB色彩空间
RGB色彩空间使用三个数值向量表示色光三基色(Red、Green、Blue)的亮度。每个通道的数量值被量化为8~256个数,因此,RGB图像的红、绿、蓝三个通道的图像都是一幅8位图。
由BGR色彩空间转换为RGB色彩空间:
1 | import cv2 as cv |
效果如下(其相对于原始图像蓝色比较凸显):
GRAY色彩空间
GRAY色彩空间一般是指8位灰度图,像素值的范围是0~255,共256个灰度级。由RGB色彩空间转换为GRAY色彩空间的标准公式为:
\[ Gray=0.299 \cdot R + 0.587 \cdot G + 0.114 \cdot B \]
上式中,Gray表示灰度图,R、G、B分别是RGB色彩空间的三个通道的图像。
BGR色彩空间转换为GRAY色彩空间:
1 | import cv2 as cv |
效果如下:
YCrCb色彩空间
在传统的RGB色彩空间中并没有亮度的信息,YCrCb色彩空间弥补了这个遗憾。在YCrCb色彩空间中,Y代表亮度,Cr和Cb保存色度信息,其中Cr表示红色分量信息,Cb表示蓝色分量信息。
从RGB色彩空间转YCrCb色彩空间的公式为:
\[ Y = 0.299 \cdot R + 0.587 \cdot G + 0.114 \cdot B \]
\[ Cr = (R-Y) \cdot 0.713 + delta \]
\[ Cb = (B-Y) \cdot 0.564 + delta \]
上式中,R、G、B分别表示RGB色彩空间的三通道信息,其中
\[ delta = \begin{cases} 128 & \text{8位图像,} \\ 32768 & \text{16位图像,} \\ 0.5 & \text{单精度图像.} \\ \end{cases} \]
BGR色彩空间转换为YCrCb色彩空间:
1 | import cv2 as cv |
HSV色彩空间
RGB色彩模型是从硬件角度提出的颜色模型,与人眼匹配时可能会产生一定的差别。HSV是从心理学角度提出的,它包括色调、饱和度和亮度三要素。其中,色调是指光的颜色,与混合光谱的主要光波长有关;饱和度是指颜色深浅程度或相对纯净度;亮度反映的是人眼感受到的光的明暗程度。
具体算法可参考:
Kobalicek, Petr, and Michal Bliznak. "Optimized RGB to HSV color conversion using SSE technology." Annals of DAAAM & Proceedings, annual 2011, pp. 1591+. Gale Academic OneFile, link.gale.com/apps/doc/A349223209/AONE?u=googlescholar&sid=bookmark-AONE&xid=4239060c. Accessed 20 Jan. 2025.
Optimized RGB to HSV color conversion using SSE technology.
由BGR色彩空间转换为HSV色彩空间:
1 | import cv2 as cv |
运行结果:
