OpenCV色彩过滤与物体追踪实战 - 第2节

2. 颜色空间基础

RGB 颜色模型 · HSV 颜色模型 · 为什么 HSV 更适合色彩过滤

1. RGB 颜色模型

RGB 模型基于加色混合,使用 红 (R)、绿 (G)、蓝 (B) 三个通道,每个通道通常为 0–255。RGB 是相机、显示器直接使用的色彩空间,但三个通道高度相关,且受光照影响剧烈。

R G B RGB 加色混合示意
特性RGB 说明
通道相关性R/G/B 高度耦合,亮度变化同时影响三个通道
光照敏感度阴影或高光下,RGB 值剧烈漂移,难以设定固定阈值
直观性不符合人类对“色调、饱和度、明度”的感知

2. HSV 颜色模型

HSV 将颜色分解为 色调 (Hue)、饱和度 (Saturation)、明度 (Value)。色调用角度 0°–180°(OpenCV 中 0–180)表示,饱和度与明度各 0–255。HSV 分离了颜色本质与光照信息。

Hue (色调) 0° – 180° Saturation (饱和度) 低 → 高 Value (明度) 暗 → 亮

HSV 各分量范围 (OpenCV)

分量范围物理意义
H (色调)0 – 179颜色种类 (红、绿、蓝等)
S (饱和度)0 – 255颜色纯度 / 鲜艳程度
V (明度)0 – 255亮度 / 光照强度

3. 为什么 HSV 更适合色彩过滤

色彩过滤的核心是 稳定地分离目标颜色。HSV 将色调与光照解耦,使得我们只需设定 H 范围即可锁定颜色,S 和 V 用于排除过暗/过饱和区域。下面通过对比说明。

✅ HSV 优势总结
• 色调 H 对光照不敏感,阴影下红色仍是红色
• 可独立调节饱和度与明度阈值,适应不同环境
• 过滤时只需一个 H 区间 + S/V 下限,代码简洁鲁棒
RGB 过滤 R > 200, G < 100, B < 100 光照变化 → 阈值失效 阴影下红色变暗 R<150 HSV 过滤 H 0–10 或 170–180 S > 60, V > 60 光照变化不影响 H 值 →

代码示例:RGB vs HSV 过滤红色

# RGB 硬阈值 (光照脆弱)
lower_rgb = np.array([200, 0, 0])
upper_rgb = np.array([255, 80, 80])
mask_rgb = cv2.inRange(img_rgb, lower_rgb, upper_rgb)

# HSV 鲁棒过滤 (推荐)
img_hsv = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2HSV)
lower_hsv = np.array([0, 60, 60])   # 红色低色调
upper_hsv = np.array([10, 255, 255])
mask_hsv = cv2.inRange(img_hsv, lower_hsv, upper_hsv)

实际项目中,HSV 过滤能大幅降低光照干扰,配合形态学操作即可稳定追踪物体。这也是本课程后续所有追踪实验的基础。