OpenCV摄像头实时滤镜开发实战 - 第4节

4. 颜色空间基础

RGB、HSV、灰度、YUV 颜色空间介绍 & cv2.cvtColor 转换函数

常见颜色空间转换关系 RGB 灰度 Gray HSV YUV cv2.COLOR_RGB2GRAY cv2.COLOR_RGB2HSV cv2.COLOR_RGB2YUV

1. RGB 颜色空间

RGB 是最基础的加色模型,由红 (R)、绿 (G)、蓝 (B) 三个通道组成。每个通道通常为 0–255,通过叠加产生丰富色彩。OpenCV 默认使用 BGR 顺序存储,与常规 RGB 顺序相反。

📌 注意: OpenCV 中 cv2.imread() 读取的图像是 BGR 格式。显示或转换前需留意通道顺序。
RGB 三通道示意 R G B 0-255 0-255 0-255

2. HSV 颜色空间

HSV 将颜色分解为色调 (Hue)、饱和度 (Saturation)、明度 (Value)。更符合人类感知,适合做颜色分割、滤镜特效。OpenCV 中 H 范围 0–179,S 和 V 范围 0–255。

通道含义OpenCV 范围
H色调 (色相)0 – 179
S饱和度0 – 255
V明度0 – 255
HSV 色相环 (Hue 0°→179°) H 决定颜色类型,S 控制鲜艳度,V 控制亮度

3. 灰度 (Gray)

单通道图像,每个像素表示亮度,范围 0 (黑) ~ 255 (白)。通过加权 RGB 得到:Gray = 0.299·R + 0.587·G + 0.114·B。灰度是许多滤镜的基础。

0 (黑) 255 (白)

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)
cv2.cvtColor 转换架构 BGR 输入 cvtColor( , code) 转换码选择 输出图像 Gray / HSV / YUV …