OpenCV摄像头实时滤镜开发实战 - 第4节
4. 颜色空间基础
RGB、HSV、灰度、YUV 颜色空间介绍 & cv2.cvtColor 转换函数
1. RGB 颜色空间
RGB 是最基础的加色模型,由红 (R)、绿 (G)、蓝 (B) 三个通道组成。每个通道通常为 0–255,通过叠加产生丰富色彩。OpenCV 默认使用 BGR 顺序存储,与常规 RGB 顺序相反。
📌 注意: OpenCV 中
cv2.imread() 读取的图像是 BGR 格式。显示或转换前需留意通道顺序。
2. HSV 颜色空间
HSV 将颜色分解为色调 (Hue)、饱和度 (Saturation)、明度 (Value)。更符合人类感知,适合做颜色分割、滤镜特效。OpenCV 中 H 范围 0–179,S 和 V 范围 0–255。
| 通道 | 含义 | OpenCV 范围 |
|---|---|---|
| H | 色调 (色相) | 0 – 179 |
| S | 饱和度 | 0 – 255 |
| V | 明度 | 0 – 255 |
3. 灰度 (Gray)
单通道图像,每个像素表示亮度,范围 0 (黑) ~ 255 (白)。通过加权 RGB 得到:Gray = 0.299·R + 0.587·G + 0.114·B。灰度是许多滤镜的基础。
4. YUV 颜色空间
YUV 将亮度 (Y) 与色度 (U, V) 分离,广泛用于视频压缩/传输。Y 代表亮度,U 和 V 代表色彩差异。OpenCV 支持多种 YUV 变体,如 COLOR_BGR2YUV。
| 分量 | 描述 | 典型范围 |
|---|---|---|
| Y | 亮度 (Luma) | 0–255 |
| U | 蓝色色度 (Cb) | 0–255 |
| V | 红色色度 (Cr) | 0–255 |
5. 颜色空间转换函数 cv2.cvtColor
OpenCV 提供 cv2.cvtColor(src, code) 完成不同颜色空间转换。第二个参数使用 cv2.COLOR_* 常量。
常用转换码:
cv2.COLOR_BGR2GRAY · cv2.COLOR_BGR2HSV · cv2.COLOR_BGR2YUV · cv2.COLOR_HSV2BGR · cv2.COLOR_GRAY2BGR
代码示例:RGB ↔ HSV / 灰度
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)
# 将 HSV 转换回 BGR
bgr_restored = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
# 转换为 YUV
yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
# 显示结果 (请自行添加 cv2.imshow / waitKey)
print('灰度形状:', gray.shape)
print('HSV形状:', hsv.shape)