[具身智能-611]:JPG / RAW / NV12 格式深度解析(适配 RDK X5 MIPI 相机场景)

📅 2026/7/22 0:54:32 👁️ 阅读次数 📝 编程学习
[具身智能-611]:JPG / RAW / NV12 格式深度解析(适配 RDK X5 MIPI 相机场景)

表格

格式类型压缩存储内容典型用途CPU 开销
JPG封装图像(有损压缩)有损压缩RGB 压缩码流图片存储、网页推流、websocket解压开销中等
RAW传感器原始裸数据无压缩Sensor 光电原始采样(Bayer 拜耳)相机底层调试、图像标定极高,必须 ISP 做去马赛克
NV12YUV 平面格式(未压缩)无压缩亮度 Y + 交错 UVMIPI 相机输出、硬件编解码、BPU 推理输入极低,嵌入式标准格式

1. RAW(Bayer Raw,传感器原始数据)

核心说明

The data directly output by the MIPI camera sensor isnot an image, but merely the photoelectric signal collected by photosensitive diodes. Common formats:RGGB8/RGGB10(OV5647/IMX219/IMX335). Data arrangement example (RGGB):

plaintext

R G R G G B G B R G R G G B G B

✅ 需要经过ISP 流水线才能生成可视图像: 去马赛克 (Demosaic) → 白平衡 → 降噪 → 伽马校正 → 输出 YUV (NV12)

工程特点

  1. 只能在最前端获取:mipi_cam 底层 VIO 接收层;一旦经过 ISP,输出就不再是 RAW。
  2. 文件后缀常见.raw/.bayer无法直接使用普通图片软件打开。
  3. 适用场景:镜头标定、调试 Sensor 寄存器、排查曝光 / 噪点问题。
  4. ⚠️不能直接送入 FCOS/YOLO 神经网络!网络只能接收 YUV/RGB。

在地平线 Demo【2. 摄像头图像本地保存】中,可以选择抓取RAW 帧用于底层调试。


2. NV12(YUV420 Semi-Planar,重中之重)

内存布局(关键!)

分为两个平面,连续存放

  1. Y 平面:全部亮度信息(分辨率 H × W)
  2. UV 平面色度信息,U、V 交错存储(分辨率 H/2 × W/2)

plaintext

YYYYYYYY YYYYYYYY UVUVUVUV UVUVUVUV

采样比例 4:2:0:色度分辨率宽高各减半。

嵌入式核心优势(RDK X5 标准)

  1. MIPI相机 ISP 默认输出格式:你的mipi_cam节点/image_combine_raw话题就是 NV12;
  2. 硬件编解码原生支持:hobot_codec H264/H265 编码输入优先使用 NV12;
  3. VPS、BPU 零拷贝友好:地平线硬件单元全部原生支持 NV12,避免转 RGB 带来内存拷贝;
  4. 相比 RGB24 节省50% 内存带宽

常见坑

  • NV12没有文件头,单纯二进制数据;保存成文件后播放器无法直接打开,必须附带分辨率。
  • AI 推理注意:网络输入要求 RGB 时,需要在 ISP/VPS 或 CPU 完成 NV12→RGB 转换。

3. JPG(JPEG,有损压缩图像)

核心说明

基于 YUV420 进行离散余弦有损压缩,带文件头、元信息,通用图片格式。

在项目里的链路位置

NV12 图像 → hobot 硬件 JPEG 编码器 → JPG 码流 对应你日志里的参数:out_format: jpegjpg_quality:85、websocket 接收/image_combine_jpeg

✅优点:通用、体积小,浏览器直接解码;

❌缺点:

  1. 有损压缩,损失图像细节,不建议送入 AI 目标检测网络;
  2. 多一层编码开销;
  3. 不适合作为算法输入,仅用于预览、上传、存档。

在整套视觉链路中的标准数据流推荐

plaintext

MIPI Sensor → RAW(Bayer) → ISP处理 → NV12(主链路) ├─分支1:NV12直接送入VPS缩放 → FCOS/YOLO推理(最优,无多余转换) ├─分支2:NV12送入硬件JPEG编码器 → JPG → websocket网页预览 ├─分支3:NV12送入H264编码器 → .h264视频录像 ├─分支4:调试抓帧:保存RAW(底层调试) / 保存NV12(算法调试)

选型决策速查表

  1. AI 算法推理输入→ 优先NV12(禁止使用 JPG)
  2. 网页远程预览、截图存档JPG
  3. 调试 Sensor、标定镜头、排查底层图像问题RAW
  4. 本地硬件编码录像→ 使用原始 NV12 送入编码器

补充实操(RDK X5)

  1. mipi_cam 输出话题:/image_combine_raw= NV12
  2. hobot_codec:NV12 → JPG / H264
  3. 如果你保存裸 NV12 文件,播放命令示例(必须指定分辨率)

bash

运行

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

p>

运行

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