[具身智能-613]:嵌入式视觉常用图像格式完整梳理(适配 RDK X5 + MIPI 相机 + FCOS/YOLO AI 链路)

嵌入式视觉常用图像格式完整梳理(适配 RDK X5 + MIPI 相机 + FCOS/YOLO AI 链路)

分为四大类:传感器原始裸数据、未压缩 YUV、未压缩 RGB、压缩图像,同时标注变换关系、工程取舍、适用场景。

一、Sensor 原始 Bayer RAW 系列(相机最前端)

来源:MIPI 摄像头感光芯片直接输出;不是可视图像,必须 ISP 处理

  1. RGGB8 / BGGR8 / GRBG8(RAW8)
    • 8bit 单通道拜耳阵列,OV5647、IMX219 常用
    • 无文件头,二进制裸流;无法直接打开
    • 用途:Sensor 调试、镜头标定、排查曝光 / 噪声 / I2C 硬件问题
  2. 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 RAWRGGB8/RGGB10底层硬件调试、标定
YUV 半平面NV12主链路:采集、编码、BPU 推理、预览✅【首选】
YUV 平面I420/YU12PC 软件调试⚠️不推荐,缺少硬件加速
RGBBGR24OpenCV 调试⚠️尽量减少使用
有损压缩JPG有损网页预览、快照存储
无损压缩PNG无损截图存档

标准数据流(最优工程链路)

plaintext

MIPI Sensor → RAW(Bayer) → ISP处理 → NV12 ├─分支1:NV12 → VPS缩放 → FCOS/YOLO BPU推理(主业务) ├─分支2:NV12 → 硬件H264 → 视频录像 └─分支3:NV12 → 硬件JPG → WebSocket远程预览

高频踩坑总结

  1. 不要把 JPG 解码成 YUV 后送给目标检测,多次压缩造成精度下降;
  2. 尽量整条链路以 NV12 流转,减少 NV12↔RGB 格式转换,降低 CPU 占用;
  3. 排查相机 I2C、Sensor 异常时抓取 RAW;调试漏检问题保存 NV12;对外预览使用 JPG;
  4. 裸流文件(RAW/NV12)没有分辨率头,播放时必须手动指定分辨率:

bash

运行

ffplay -f rawvideo -pixel_format nv12 -video_size 1280x720 frame.nv12