[具身智能-563]:图像存储的格式标准
·
图像存储格式标准完整梳理
分为两大体系:RGB/RGBA(打包格式)、YUV 系列(Planar / 打包 / 半平面),重点结合你地平线 RDK、bgr2nv12、FCOS 模型场景讲解。
基础术语
- 打包 (Packed):同一个像素的多通道连续存放
R G B R G B - 平面 (Planar):所有通道分开整块存放
RRRR...GGGG...BBBB... - 半平面 (Semi-Planar):亮度单独一块,色度交织存放(NV12/NV21)
- 采样格式 YUV444 / YUV422 / YUV420:色度分辨率压缩比例
一、RGB 系列标准(OpenCV 常用)
像素顺序:单像素内通道排列
1. BGR8 Packed(OpenCV 默认)
- 布局:
B G R | B G R | ... - 维度:HWC (Height, Width, Channel)
- 位深:每通道 8bit uint8
- 来源:USB 摄像头读到的 frame、日常图像处理
代码中
frame = cap.read()获取的就是这个格式。
2. RGB8 Packed
布局:R G B R G B ... PIL/Pytorch 默认,和 OpenCV 通道顺序相反
3. BGRA / RGBA
增加 Alpha 透明通道,B G R A / R G B A
⚠️ 重点区分:通道顺序 ≠ 存储排布
RGB≠BGR,直接送入模型推理会颜色全部错乱。
二、YUV 基础概念
- Y:亮度(Luma);U/V:色度(Chroma)
- YUV420:2×2 像素块共用一组 U、V,色度宽高均减半;总字节 = H×W×1.5
- YUV422:横向 2 像素共享一组 UV;总字节 = H×W×2
- YUV444:无压缩,每个像素独立 UV;总字节 = H×W×3
三、YUV420 三大主流标准(重中之重,对应代码)
1. I420 (YUV420 Planar)
三平面格式
plaintext
[全部Y]
[全部U]
[全部V]
排布:YYYYYYYY UUUU VVVV
- Y:H×W
- U:H×W/4
- V:H×W/4 ✅ 你代码
cv2.COLOR_BGR2YUV_I420输出就是它
2. NV12 (YUV420 Semi-Planar 半平面)
地平线模型 `fcos_512x512_nv12.bin强制输入格式
plaintext
[全部Y]
[U0 V0 U1 V1 U2 V2 ...]
- Y 单独一块
- UV 交织存放(U 后跟 V)
这就是
bgr2nv12_opencv最终生成格式
3. NV21 (YUV420 Semi-Planar)
安卓摄像头原生输出最多!
plaintext
[全部Y]
[V0 U0 V1 U1 V2 U2 ...]
UV 顺序:V U V U…… ❌ NV12 ≠ NV21,混用直接画面偏绿 / 偏紫
I420 / NV12 / NV21 直观对比
plaintext
I420: YYYYYY UUUU VVVV
NV12: YYYYYY UVUVUVUV
NV21: YYYYYY VUVUVUVU
四、其他常见 YUV 标准(拓展)
YUV422
- YUYV(Packed):
Y0 U0 Y1 V0 Y2 U1 Y3 V1 - UYVY(Packed):
U0 Y0 V0 Y1 U1 Y2 V1 Y3
YUV444P
三平面:[Y][U][V],色度不压缩。
五、内存排布分类总表
表格
| 类型 | 代表格式 | 存储特征 |
|---|---|---|
| Packed 打包 | BGR8、RGB8、YUYV | 像素连续,通道交织 |
| Planar 全平面 | I420,YUV444P | 各通道独立整块 |
| Semi-Planar 半平面 | NV12、NV21 | Y 单独平面,UV 交织 |
六、分辨率硬性约束(YUV420 强制规则)
NV12 / I420 / NV21 宽、高必须是偶数 原理:色度以 2×2 像素块采样; 如果 H/W 为奇数,UV 平面边界错位 → 图像马赛克、花屏。
七、结合你地平线 RDK 工程场景总结
- OpenCV 采集 USB 摄像头 → BGR8 Packed(HWC)
- cv2 转成 I420 (三平面)
- 代码手动重组 UV 通道 → NV12(半平面)一维 buffer
dnn.forward(nv12_data)送入 BPU 推理
为什么模型选用 NV12? MIPI 摄像头原生输出 NV12;省去色彩空间转换,BPU 硬件原生加速 NV12 输入,减少 CPU 开销。
八、极易踩坑对照表
- BGR ≠ RGB → 颜色颠倒
- NV12 ≠ NV21 → UV 顺序颠倒(偏色)
- I420 ≠ NV12 → 布局不同,直接送入模型完全失效
- YUV420 图像宽高奇数 → UV 采样越界,画面碎裂
九、补充:Tensor 维度格式(深度学习额外标准)
- NCHW:Batch/Channel/Height/Width(地平线 BPU 默认)
- NHWC:Batch/Height/Width/Channel(TensorFlow) ⚠️ 区分:图像内存存储格式 ≠ 神经网络 Tensor 排布格式,二者是两个独立概念!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)