2.1 颜色空间与通道
总目录:1.1 OpenCV介绍与学习路线 | 第二章:基础图像处理 | 编号:2.1
← 上一节:1.5 NumPy与图像数组 | 下一节:2.2 缩放裁剪与拼接 →
2.1 颜色空间与通道
同一张图可以换一种方式描述。RGB 关心红绿蓝混了多少,HSV 更像人说的“什么颜色、颜色多纯、亮不亮”,灰度图则只保留明暗。
一、通道是什么
三通道彩色图可以看成三张灰度图叠在一起,每张记录一种颜色分量:

blue, green, red = cv2.split(image)
merged = cv2.merge([blue, green, red])
split 容易读懂,但需要分配多个数组。只取一个通道时,NumPy 切片更直接:
blue = image[:, :, 0]
二、BGR 与 RGB
OpenCV 默认彩色顺序是 BGR:
blue_pixel = (255, 0, 0)
red_pixel = (0, 0, 255)
Matplotlib、Pillow 和很多深度学习接口更常使用 RGB。直接把 BGR 交给它们,红蓝会交换:
rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)
三、灰度图:只留下亮度
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
灰度图只有一个通道,常用于:
- 阈值分割;
- Canny 边缘检测;
- 轮廓前的预处理;
- 不需要颜色的计算。
它不是简单把 B、G、R 三个数求平均,而是按人眼对不同颜色亮度的敏感程度加权。
四、HSV:把颜色种类和明暗拆开
HSV 的三个通道:
| 通道 | 英文 | 直观含义 |
|---|---|---|
| H | Hue | 色相,大概回答“是什么颜色” |
| S | Saturation | 饱和度,颜色纯不纯 |
| V | Value | 明度,亮不亮 |
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
对 8 位图像,OpenCV 常用范围是:
H:0~179
S:0~255
V:0~255
H 只有 0~179,是因为 OpenCV 用 8 位整数把 0~360° 色相缩放了一半。
颜色检测喜欢 HSV,是因为调亮度时主要影响 V,不会像直接在 BGR 三个方向里那样难描述。详细实践见 2.7 HSV颜色检测。
五、cvtColor:颜色空间转换
常用写法:
gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)
hsv = cv2.cvtColor(bgr, cv2.COLOR_BGR2HSV)
bgr_again = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
不要把 HSV 直接当普通彩色图看
cv2.imshow("HSV raw", hsv)
这样显示的是 H、S、V 三个数被窗口当作 B、G、R 解释后的伪颜色,不能凭肉眼把它当“真实 HSV 效果”。通常应拆通道观察,或转换回 BGR。
什么时候选哪一种
要正常显示、绘图 → BGR
要交给 RGB 接口 → RGB
只关心亮暗、边缘、形状 → 灰度
要按颜色范围分割 → HSV
← 上一节:1.5 NumPy与图像数组 | 下一节:2.2 缩放裁剪与拼接 →
留言区
不收集任何个人信息;昵称只绑定浏览器里的随机 Cookie。