1. 颜色转换
py
import cv2
import matplotlib.pyplot as plot
img = cv2.imread("tmp.jpg")
img_r = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_g = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_h = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
img_l = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
plot.figure(figsize=(15,3));
plot.subplot(1,5,1)
plot.title('BGR image')
plot.imshow(img)
plot.subplot(1,5,2)
plot.title('BGR to RGB')
plot.imshow(img_r)
plot.subplot(1,5,3)
plot.title('BGR to Gray')
plot.imshow(img_g)
plot.subplot(1,5,4)
plot.title('BGR to HSV')
plot.imshow(img_h)
plot.subplot(1,5,3)
plot.title('BGR to LAB')
plot.imshow(img_l)
plot.show()

2. 各颜色空间对比
颜色空间 | 通道数 | 通道含义 | 数据范围 | 主要应用场景 | 优缺点 |
---|---|---|---|---|---|
RGB | 3 | Red(红)、Green(绿)、Blue(蓝) | 各通道值范围:0-255 | 图像显示、基础图像处理 | ✅ 直观易用 ❌ 对光照变化敏感 |
BGR | 3 | Blue(蓝)、Green(绿)、Red(红) | 各通道值范围:0-255 | OpenCV默认图像格式、视频处理 | ✅ OpenCV原生支持 ❌ 与常规RGB顺序相反 |
Gray | 1 | 亮度(Luminance) | 单通道值范围:0-255 | 人脸检测、文字识别、简化计算 | ✅ 计算效率高 ❌ 丢失颜色信息 |
HSV | 3 | Hue(色相)、Saturation(饱和度)、Value(明度) | H: 0-180 S/V: 0-255 | 颜色检测、色彩分割、光照鲁棒处理 | ✅ 颜色分离效果好 ❌ H通道是循环角度值(0°=180°) |
Lab | 3 | L(亮度)、a(红绿轴)、b(黄蓝轴) | L: 0-255 a/b: -128~127 | 颜色一致性校正、复杂颜色分割 | ✅ 接近人类视觉感知 ❌ 计算复杂度较高 |
3. 应用说明
3.1 RGB vs BGR
- OpenCV默认使用BGR格式,与其他库(如Matplotlib)交互时需转换
- 转换方法:cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
3.2 HSV
- H(色相)在OpenCV中被压缩到0-180范围(常规为0-360°)
- 常用于颜色过滤(如检测红色物体)
3.3 Lab
- L通道表示亮度,与设备无关
- a通道:绿色→红色(-128→127)
- b通道:蓝色→黄色(-128→127)
- 在Photoshop等专业工具中广泛使用
3.4 Gray
- 转换公式:Gray = 0.299R + 0.587G + 0.114*B(加权平均法)
3.5 典型使用场景示例:
- 人脸检测:优先使用灰度图(减少计算量)
- 颜色追踪:HSV空间定义颜色范围(如cv2.inRange())
- 图像增强:Lab空间调整亮度(L通道)不影响颜色
- 跨设备颜色一致性:Lab空间进行颜色校正
系列文章: