[具身智能-616]:相机图像传感器、相机ISP、RDK X5的推理单元、openCV底层库,GPU,他们在图像处理中各自的输入和输出格式?
重要前提: 1)传输格式 ≠ 内存格式;MIPI CSI 链路只是传输通道,下面写的是模块接口能识别的有效像素数据格式2)RAW Bayer 无法直接进 BPU / OpenCV / GPU,必须先经过 ISP Debayer 3)RDK X5 BPU 最优输入:NV12;不接受 RAW
1. 图像传感器 Sensor(IMX 等)
本质:光电转换器件,只输出原始采样数据
✅ 支持输入:无(接收光线)
✅ 原生输出格式(MIPI CSI-2 数据流)
- RAW8、RAW10、RAW12、RAW14(Bayer RGGB/BGGR/GRBG/GBRG)
不产生 YUV/RGB;不存在 NV12、YUYV。
数据流边界:Sensor 输出 RAW → 送入硬件 ISP
2. RDK X5 硬件 ISP(板载硬件成像流水线)
输入:只能是 Sensor Bayer RAW输入:RAW8 / RAW10 / RAW12 Bayer
输出(内存图像格式,可选配置)
- NV12(YUV420 Semi-Planar,工程最常用,BPU 直连首选)
- YUYV / UYVY(YUV422 Interleaved)
- RGB888 / BGR888(占用带宽高,尽量少用)
- 部分模式可输出 YV12
❌ ISP不会输出 RAW;RAW 进来,Debayer 之后只能输出彩色YUV/RGB
关键工程习惯: ISP → NV12 直接送 BPU,避免额外格式转换拷贝
3. RDK X5 BPU(AI 推理单元,地平线自研 NPU)
⚠️BPU 不能接收 Bayer RAW
支持输入格式(模型推理输入)
- NV12(YUV420,推荐最优,支持硬件零拷贝)
- YUYV(YUV422)
- RGB888 / BGR888
注意:很多量化模型基于 NV12 训练,RGB 输入会多一层颜色空间转换开销
BPU 输出格式
不是图像!是推理结果数据(内存数组)
- 检测框坐标、置信度、类别 ID
- 分割掩码数组(float/uint8 二维数组)
- 特征向量
BPU不输出图片帧;输出只是结构化推理数据,没有像素画面
4. GPU(RDK X5 内置 GPU,用于并行运算、渲染、格式转换)
GPU 操作对象:内存中已经解拜耳完成的彩色图像
支持输入格式
NV12、YUYV、RGB888、BGR888
输出格式
NV12、YUYV、RGB888、BGR888
典型用途:YUV↔RGB、缩放、旋转、仿射变换、画面图层叠加渲染
GPU不能直接处理 Sensor RAW,RAW 必须先过 ISP
5. OpenCV 底层库(默认 CPU 运行;可 OpenCL 卸载到 GPU)
OpenCV 核心容器:cv::Mat
原生支持输入格式(Mat 承载)
- BGR8(最通用,imread/imshow 默认)
- RGB8
- GRAY8(单通道灰度图)
- 可解析 YUYV;原生不直接支持 NV12
NV12 在 OpenCV 里需要手动拆分 Y 平面、UV 平面再构造 Mat,无原生封装,容易出错
❌ OpenCV 限制
- 不原生支持 Bayer RAW 实时流处理(有 cvtColor COLOR_Bayer 转换,但纯 CPU,性能极差,工程禁止实时场景使用)
OpenCV 输出格式
仍然是cv::Mat:BGR/RGB/GRAY;也可转换生成 YUYV
OpenCV 不能直接识别 ISP 输出的 NV12 帧做常规处理,一般两条路线:
方案 A:ISP 输出 BGR 给 OpenCV(带宽高)
方案 B:ISP 输出 NV12 → GPU 硬件转BGR→ 送入 OpenCV(推荐)
汇总简表(一目了然)
表格
| 模块 | 合法输入格式 | 输出格式 | 备注 |
|---|---|---|---|
| 图像 Sensor | 光信号 | RAW8/RAW10/RAW12(Bayer) | 无彩色图像,仅原始像素采样 |
| RDK 硬件 ISP | Bayer RAW8/10/12 | NV12、YUYV、RGB888/BGR888 | 唯一能处理 RAW 的硬件模块 |
| BPU 推理单元 | NV12、YUYV、RGB/BGR888❌不支持 RAW | 推理结果(框、掩码、特征向量) | 不输出图像像素数据 |
| GPU | NV12、YUYV、RGB/BGR888❌不支持 RAW | NV12、YUYV、RGB/BGR888 | 可编程并行图像变换、渲染 |
| OpenCV(cv::Mat) | BGR、RGB、GRAY、YUYVNV12 需要手动解析;RAW 不适合实时 | BGR/RGB/GRAY/YUYV(cv::Mat) | 默认 CPU 运算,尽量减少大图实时转换 |
【RDK X5 最优标准链路格式流向】
plaintext
Sensor(RAW10) → ISP → NV12(内存帧) ├─ 分支1:NV12 零拷贝 → BPU推理(AI目标检测) └─ 分支2:NV12 → GPU硬件转BGR → OpenCV(轮廓/形态学/后处理绘图)高频踩坑提醒
- 不要尝试把 RAW 直接丢给 OpenCV/GPU/BPU,只能 ISP 消化 RAW;
- 不要 ISP 输出 BGR 送给 BPU,优先 NV12,节省带宽;
- OpenCV imshow 只认 BGR,NV12 无法直接显示;
- BPU 只输出检测数据,想要画框必须在 CPU/GPU/OpenCV 完成绘制。
