第3章 色彩空间与转换
RGB、HSV、LAB、GRAY 色彩空间原理及转换方法
色彩空间是描述颜色的数学模型。在图像处理中,不同的色彩空间能够突出不同的视觉特征,从而为后续分析(如分割、检测、增强)提供更合适的表示。本章深入剖析四种核心色彩空间:RGB、HSV、LAB、GRAY,并给出完整的转换原理与代码实现。
1. RGB 色彩空间
RGB(红、绿、蓝)是最基础的加色模型,广泛用于显示器与相机。每个通道取值范围 0~255(8位),通过三原色叠加产生丰富色彩。但 RGB 通道间高度相关,对光照变化敏感,因此不适合直接用于颜色分割。
2. GRAY 灰度空间
灰度图像仅包含亮度信息,每个像素取值 0(黑)~ 255(白)。常用转换公式:Gray = 0.299·R + 0.587·G + 0.114·B,符合人眼对绿色敏感度最高的特性。灰度图简化计算,是许多预处理步骤的基础。
3. HSV 色彩空间
HSV(色相 Hue、饱和度 Saturation、明度 Value)将颜色分解为直观的属性。色相用角度 0°~360° 表示,饱和度与明度归一化到 [0,1]。HSV 对光照变化鲁棒,常用于颜色识别与分割。
4. LAB 色彩空间
LAB(CIE L*a*b*)是感知均匀的色彩空间,L 表示亮度(0~100),a 表示绿到红,b 表示蓝到黄。LAB 与设备无关,色差计算符合人眼视觉,广泛用于色彩校正与图像质量评估。
5. 色彩空间转换方法
OpenCV 提供 cv2.cvtColor() 函数,支持超过 150 种转换。下表列出最常用的转换标志:
| 转换 | OpenCV 标志 | 公式 / 说明 |
|---|---|---|
| RGB → GRAY | COLOR_RGB2GRAY | Gray = 0.299·R + 0.587·G + 0.114·B |
| RGB → HSV | COLOR_RGB2HSV | 非线性变换,H ∈ [0,179], S,V ∈ [0,255] |
| RGB → LAB | COLOR_RGB2LAB | 先转 XYZ 再转 LAB,感知均匀 |
| HSV → RGB | COLOR_HSV2RGB | 逆变换,用于可视化 |
| LAB → RGB | COLOR_LAB2RGB | 逆变换,注意 D65 白点 |
💡 核心技巧: 在 OpenCV 中,默认图像通道顺序为 BGR,而非 RGB。使用
cv2.COLOR_BGR2GRAY 等 BGR 系列标志避免通道错乱。
Python 代码示例
import cv2
import numpy as np
# 读取图像 (BGR 顺序)
img = cv2.imread('example.jpg')
# 转换为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 转换为 HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 转换为 LAB
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
# 显示结果
cv2.imshow('GRAY', gray)
cv2.imshow('HSV', hsv)
cv2.imshow('LAB', lab)
cv2.waitKey(0)
cv2.destroyAllWindows()
6. 色彩空间转换流程架构
7. 本章小结
- RGB 是面向设备的色彩模型,适合显示,但通道相关性强。
- GRAY 丢弃颜色信息,保留亮度,计算效率高。
- HSV 分离色相与亮度,对光照鲁棒,适合颜色分割。
- LAB 感知均匀,适合色彩差异度量与色彩校正。
- OpenCV 的
cvtColor是转换核心,注意 BGR 与 RGB 的区别。