[具身智能-613]:嵌入式视觉常用图像格式完整梳理(适配 RDK X5 + MIPI 相机 + FCOS/YOLO AI 链路)
嵌入式视觉常用图像格式完整梳理(适配 RDK X5 + MIPI 相机 + FCOS/YOLO AI 链路)
分为四大类:传感器原始裸数据、未压缩 YUV、未压缩 RGB、压缩图像,同时标注变换关系、工程取舍、适用场景。
一、Sensor 原始 Bayer RAW 系列(相机最前端)
来源:MIPI 摄像头感光芯片直接输出;不是可视图像,必须 ISP 处理
- RGGB8 / BGGR8 / GRBG8(RAW8)
- 8bit 单通道拜耳阵列,OV5647、IMX219 常用
- 无文件头,二进制裸流;无法直接打开
- 用途:Sensor 调试、镜头标定、排查曝光 / 噪声 / I2C 硬件问题
- RGGB10 / RGGB12(RAW10/RAW12)
- 10/12 位高精度采样,IMX335 等高动态传感器
- 数据位宽更大,内存占用更高
流转规则:RAW →(ISP Demosaic+3A 处理)→ YUV (NV12)
❌ 不能直接送入 AI 网络、编码器、显示模块。
二、未压缩 YUV 系列(嵌入式硬件标准,重点:NV12)
YUV = 亮度 (Y)+ 色度 (UV),利用人眼对色彩不敏感,降低色度采样带宽,是ISP 输出标准。
1. NV12(YUV420SP 半平面)⭐【RDK X5 首选】
布局:1 个完整 Y 平面 + UV 交错平面(U、V 交替存放)
plaintext
YYYYY YYYYY UVUVU UVUVU- 地平线 ISP/VPS/BPU/H264/JPEG编码器原生支持
- mipi_cam
/image_combine_raw默认输出格式 - 用途:AI 推理输入、硬件编码、EGL 本地预览
2. NV21(YUV420SP)
布局:Y 平面 + VU 交错,安卓相机默认格式;和 NV12 仅 UV 顺序相反,极易出现画面偏色。
3. YU12/I420(YUV420P 平面)
三个独立平面:Y U V 依次分开存储;PC 端常见,嵌入式硬件支持弱,不推荐。
4. YV12
Y、V、U 分开排列,较少使用。
5. YUYV / UYVY(YUV422 打包格式)
打包存储,采样率更高;多用于 USB 摄像头 V4L2 输出,带宽高于 NV12。
转换约束: RAW→ISP→NV12;NV12 可硬件 / 软件转为 RGB;
不建议反向:压缩格式解码后再转回 YUV 做 AI 推理。
三、未压缩 RGB 系列(CPU / 桌面图像标准)
1. RGB24 / BGR24
每个像素 R G B 各 8bit;OpenCV 默认使用BGR24。
- 缺点:内存占用大(比 NV12 多 50%),地平线硬件无法零拷贝接收
- 用途:PC 调试、OpenCV 算法开发
- ⚠️工程避坑:尽量避免
NV12→RGBCPU 拷贝,优先使用VPS 硬件转换。
2. RGB565
16bit 低深度 RGB,多用于简易 LCD 屏幕,不适合 AI。
3. RGBA32
RGB+Alpha 透明通道,GUI 界面渲染使用,视觉算法极少用到。
四、有损压缩静态图像(存储 / 网络预览)
1. JPG(JPEG)
底层编码输入要求 YUV420;有损压缩
- 优点:通用、体积小,浏览器直接解码;websocket 预览使用
- 缺点:存在画质损失;禁止解压后送入 FCOS/YOLO 推理
2. JPEG2000
压缩性能更好,但硬件编码器支持极少,嵌入式基本不用。
3. WebP
谷歌格式,同等画质体积小于 JPG;网页场景可用,开发板硬件加速少。
五、无损压缩静态图像
1. PNG
无损压缩 RGB;支持透明通道
- 特点:压缩耗时高于 JPG,无画质损失
- 用途:截图存档、UI 素材;不适合实时视频链路
2. TIFF
无损高精度图像,工业相机、测绘、标定使用,体积巨大。
六、视频码流(不属于静态图片,工程配套)
- H.264/H.265 裸流(
.h264):NV12 送入硬件编码器生成 - MP4:封装容器,内部承载 H264 码流 + 时间戳
核心对比总表(面向RDK 视觉工程)
表格
| 格式大类 | 代表格式 | 是否压缩 | 是否可视图像 | 推荐用途 | 是否适合 AI 推理 |
|---|---|---|---|---|---|
| Sensor RAW | RGGB8/RGGB10 | 无 | ❌ | 底层硬件调试、标定 | ❌ |
| YUV 半平面 | NV12 | 无 | ✅ | 主链路:采集、编码、BPU 推理、预览 | ✅【首选】 |
| YUV 平面 | I420/YU12 | 无 | ✅ | PC 软件调试 | ⚠️不推荐,缺少硬件加速 |
| RGB | BGR24 | 无 | ✅ | OpenCV 调试 | ⚠️尽量减少使用 |
| 有损压缩 | JPG | 有损 | ✅ | 网页预览、快照存储 | ❌ |
| 无损压缩 | PNG | 无损 | ✅ | 截图存档 | ❌ |
标准数据流(最优工程链路)
plaintext
MIPI Sensor → RAW(Bayer) → ISP处理 → NV12 ├─分支1:NV12 → VPS缩放 → FCOS/YOLO BPU推理(主业务) ├─分支2:NV12 → 硬件H264 → 视频录像 └─分支3:NV12 → 硬件JPG → WebSocket远程预览高频踩坑总结
- 不要把 JPG 解码成 YUV 后送给目标检测,多次压缩造成精度下降;
- 尽量整条链路以 NV12 流转,减少 NV12↔RGB 格式转换,降低 CPU 占用;
- 排查相机 I2C、Sensor 异常时抓取 RAW;调试漏检问题保存 NV12;对外预览使用 JPG;
- 裸流文件(RAW/NV12)没有分辨率头,播放时必须手动指定分辨率:
bash
运行
ffplay -f rawvideo -pixel_format nv12 -video_size 1280x720 frame.nv12