[具身智能-618]:YUV vs RGB 完整对比
一、基础定义
RGB
基于发光原理(显示器标准)。 每个像素由R 红、G 绿、B 蓝三个通道混合形成色彩。 常见:RGB24 / BGR24(OpenCV)、RGB888。
模型逻辑:直接描述像素三原色光强度。
YUV
基于人眼视觉特性(摄像机 / 视频标准)。
- Y:亮度(Luma),画面明暗;人眼极其敏感;
- U、V:色度(Chroma),色彩信息;人眼敏感度低。
模型逻辑:把亮度和色彩信息拆分开存储,可以对色度做压缩采样。
二、核心本质差异
- 设计目标不同
- RGB:面向显示设备(屏幕自发光);PC、GUI、OpenCV、CNN 训练环境原生使用 RGB。
- YUV:面向图像采集与视频传输(摄像机 ISP、硬件编解码、嵌入式流水线)。
- 最重要特性:YUV 支持色度下采样人眼对色彩不敏感,不需要每个亮度点都配套独立 UV。 由此产生:444 / 422 / 420采样格式。
- YUV444:每个 Y 对应一组 UV(等价 RGB,无压缩)
- YUV422:横向每 2 个 Y共用一组 UV
- YUV420:2×2 区域内 4 个 Y 共用一组 UV(NV12 就是 YUV420SP)
RGB不存在采样压缩方案,每个像素必须完整存储 R/G/B。
- 带宽与内存差异(1080P 单帧举例)分辨率 1920×1080
- RGB24:1920×1080×3 ≈6.22MB
- NV12(YUV420):1920×1080×1.5 ≈3.11MB✅ NV12内存占用只有 RGB24 的50%,这是嵌入式优先选用 YUV (NV12) 最核心理由。
三、相互转换公式(BT.601 工业相机标准)
RGB → YUV
plaintext
Y = 0.299R + 0.587G + 0.114B U = -0.14713R - 0.28886G + 0.436B V = 0.61497R - 0.51499G - 0.10001BYUV → RGB
plaintext
R = Y + 1.403 * V G = Y - 0.344 * U - 0.714 * V B = Y + 1.770 * U⚠️区分:Full Range (0~255,相机 ISP 输出) / Limited Range (16~235,视频标准),混用会画面发灰、对比度异常。
四、对照表(工程直接参考)
表格
| 对比维度 | RGB(RGB24/BGR24) | YUV(典型:NV12 YUV420SP) |
|---|---|---|
| 通道含义 | 红、绿、蓝三原色 | Y 亮度;U/V 色度 |
| 采样压缩 | 不支持,每个像素三通道齐全 | 支持色度降采样 420,节省带宽 |
| 内存开销 | 基准 100% | 仅 50%(420) |
| 原生适用场景 | PC 显示、OpenCV、CNN 神经网络训练 | 相机 ISP 输出、MIPI 链路、硬件 H264/JPEG 编码、BPU 嵌入式流水线 |
| RDK X5 硬件友好度 | BPU 可支持,但通常需要额外格式转换 | ⭐最优原生支持,全硬件通路(ISP/VPS/BPU/ 编码器) |
| 典型问题 | 大数据量,高分辨率高帧率下带宽压力大 | PC 通用软件支持弱,无法直接用 OpenCV imread 打开裸流 |
| 通道顺序坑 | OpenCV=BGR; CNN 网络 = RGB, 极易颠倒偏色 | NV12 / NV21 区别为 UV/VU 顺序, 顺序错画面色彩反转 |
五、结合你整条视觉链路流转关系
plaintext
CMOS → Bayer RAW ↓ ISP Demosaic → RGB444(中间临时格式,不在外部输出) ↓ ISP:RGB → YUV + 420色度下采样 + 重排内存 NV12(YUV420SP)【mipi_cam输出话题】 ├─分支1:BPU硬件内置预处理 NV12→RGB → FCOS/YOLO推理(最优方案,无CPU拷贝) ├─分支2:NV12送入硬件编码器 → H264/JPG(视频/网页预览) └─分支3:CPU/VPS转换 NV12 → BGR → OpenCV画框、调试截图关键结论
- RAW 不会直接生成 NV12:ISP 内部必须先插值得到完整 RGB,再转 YUV。
- CNN 网络本质只接收 RGB 张量;NV12 只是嵌入式硬件层面的传输格式,进入网络前必然重新要转为 RGB。
六、选型策略(RDK X5 项目落地)
✅数据传输整条链路优先保持 NV12 (YUV)尽量推迟「YUV→RGB」转换;转换越晚,CPU 内存拷贝越少、延迟越低。
什么时候用 RGB?
- PC 上训练 FCOS/YOLO 数据集;
- OpenCV 绘制检测框、算法调试;
- 不支持 YUV 的第三方算法库。
什么时候全程保留 NV12 (YUV)?
正式产品主链路:相机采集 → AI 推理 → 视频编码。
七、常见踩坑点汇总
- 不要在链路前端把 NV12 强制转 RGB:会翻倍带宽占用,CPU 负载飙升;
- OpenCV 使用 BGR,CNN 使用 RGB,二者通道顺序相反;
- NV12 裸流没有文件头,播放器必须手动指定分辨率;
- YUV 转换务必确认色域(Full / Limited Range),否则图像对比度异常;
- NV12 (NV12=UV 交错)、NV21 (VU 交错) 极易混淆,直接导致色彩颠倒。
