跳到主要内容

颜色空间转换

在 NV12 和 RGB888 格式之间进行颜色空间转换。Qualcomm 智能设备默认使用 NV12 格式,而常见的图像处理格式为 RGB888。该示例支持 DMA-BUF 输入输出和 QRB ROS Transport 零拷贝传输,提供 GPU(OpenGL ES)和 CPU(OpenCV)两种后端。

以下验证使用 CPU/OpenCV 后端,无需显示器或 GPU。

前提条件

源码构建

步骤 1:克隆仓库

radxa@airbox$
git clone https://github.com/qualcomm-qrb-ros/qrb_ros_color_space_convert.git

步骤 2:构建(CPU/OpenCV 后端)

radxa@airbox$
cd qrb_ros_color_space_convert
source /opt/ros/jazzy/setup.bash
colcon build --packages-up-to qrb_ros_colorspace_convert \
--cmake-args -DUSE_OPENCV_BACKEND=ON -DBUILD_TESTING=OFF

GPU 后端使用 OpenGL ES,需安装 qcom-adreno-devweston,CMake 参数为 -DUSE_OPENCV_BACKEND=OFF,并需连接显示器。

运行

需要一个自定义 ROS 节点发布测试图像到 /image_raw。以下以 Python 测试脚本为例。

终端 1 — 启动转换节点:

radxa@airbox$
cd qrb_ros_color_space_convert
source /opt/ros/jazzy/setup.bash
source install/setup.bash
ros2 launch qrb_ros_colorspace_convert colorspace_convert.launch.py \
conversion_type:=nv12_to_rgb8 latency_fps_test:=False

终端 2 — 运行测试脚本:

radxa@airbox$
cd qrb_ros_color_space_convert
source /opt/ros/jazzy/setup.bash
source install/setup.bash
python3 test/colorspace_ros_test.py nv12_to_rgb8 \
--output artifacts/data/nv12_to_rgb8.raw

测试脚本发布 64×48 已知图案到 /image_raw,订阅 /image 并与独立 OpenCV 参考结果逐字节比较。

反向转换(RGB8 → NV12)将 conversion_type 和脚本参数改为 rgb8_to_nv12 即可。

预期输出

mode=nv12_to_rgb8
input=nv12
output=rgb8
width=64
height=48
max_error=0
mean_error=0.000000
result=PASS

max_error=0 表示有效像素区域数据完全一致。

    您需要登录 GitHub 才能发表评论。如果您已登录,请忽略此消息。

    Radxa-docs © 2026 by Radxa Computer (Shenzhen) Co.,Ltd. is licensed under CC BY 4.0