You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现RGB转Bayer格式 面向CARLA平台HIL仿真场景需求

RGB转Bayer格式实现方案(适配CARLA HIL仿真场景)

核心逻辑说明

RGB转Bayer本质是按照指定Bayer阵列排列规则对RGB三通道做下采样,每个像素位置仅保留对应色彩通道的数值,最终输出单通道的raw数组,体积为原RGB图的1/3,适配网络传输需求。
转换前需先确认服务端解包库支持的Bayer阵列模式,常用模式共4种:RGGB、BGGR、GBRG、GRBG,模式不匹配会导致解包后色彩完全错误。

方案1:轻量化Numpy原生实现(推荐)

无额外依赖,直接适配CARLA输出的三维RGB数组,性能损耗极低,适合仿真场景高帧率输出需求。

import numpy as np

def rgb_to_bayer(rgb_img: np.ndarray, bayer_pattern: str = "RGGB") -> np.ndarray:
    """
    将RGB三维数组转换为指定模式的Bayer单通道数组
    :param rgb_img: 输入RGB数组,格式为(Height, Width, 3),通道顺序为R-G-B
    :param bayer_pattern: 目标Bayer模式,支持RGGB/BGGR/GBRG/GRBG
    :return: 单通道Bayer raw数组,格式为(Height, Width)
    """
    h, w = rgb_img.shape[:2]
    bayer = np.zeros((h, w), dtype=rgb_img.dtype)
    
    if bayer_pattern == "RGGB":
        bayer[0::2, 0::2] = rgb_img[0::2, 0::2, 0]  # R通道
        bayer[0::2, 1::2] = rgb_img[0::2, 1::2, 1]  # G通道
        bayer[1::2, 0::2] = rgb_img[1::2, 0::2, 1]  # G通道
        bayer[1::2, 1::2] = rgb_img[1::2, 1::2, 2]  # B通道
    elif bayer_pattern == "BGGR":
        bayer[0::2, 0::2] = rgb_img[0::2, 0::2, 2]  # B通道
        bayer[0::2, 1::2] = rgb_img[0::2, 1::2, 1]  # G通道
        bayer[1::2, 0::2] = rgb_img[1::2, 0::2, 1]  # G通道
        bayer[1::2, 1::2] = rgb_img[1::2, 1::2, 0]  # R通道
    elif bayer_pattern == "GBRG":
        bayer[0::2, 0::2] = rgb_img[0::2, 0::2, 1]  # G通道
        bayer[0::2, 1::2] = rgb_img[0::2, 1::2, 2]  # B通道
        bayer[1::2, 0::2] = rgb_img[1::2, 0::2, 0]  # R通道
        bayer[1::2, 1::2] = rgb_img[1::2, 1::2, 1]  # G通道
    elif bayer_pattern == "GRBG":
        bayer[0::2, 0::2] = rgb_img[0::2, 0::2, 1]  # G通道
        bayer[0::2, 1::2] = rgb_img[0::2, 1::2, 0]  # R通道
        bayer[1::2, 0::2] = rgb_img[1::2, 0::2, 2]  # B通道
        bayer[1::2, 1::2] = rgb_img[1::2, 1::2, 1]  # G通道
    else:
        raise ValueError(f"不支持的Bayer模式:{bayer_pattern},仅支持RGGB/BGGR/GBRG/GRBG")
    
    return bayer

方案2:高仿真度实现(适配HIL测试真实度要求)

如果需要模拟真实物理相机的sensor响应、黑电平、噪声等特性,可以使用colour-science库的专业接口:

  1. 先安装依赖:pip install colour-science
  2. 调用示例:
import colour
from colour.models import bayer_pattern_RGGB, bayer_pattern_BGGR

# 以RGGB模式为例,其他模式替换对应枚举值即可
bayer_raw = colour.cfa_rgb_to_bayer(rgb_img, pattern=bayer_pattern_RGGB)

正确性校验方法

可借助OpenCV的Bayer转RGB接口反向验证转换结果:

import cv2

# 假设你转换的是RGGB模式的Bayer数组
converted_bayer = rgb_to_bayer(carla_rgb_img, "RGGB")
# 反向转换回RGB,注意OpenCV默认通道顺序为BGR,需要调整为RGB
recovered_rgb = cv2.cvtColor(converted_bayer, cv2.COLOR_BayerRG2RGB)
# 对比recovered_rgb和原始carla_rgb_img的误差,误差在合理范围内即说明转换正确

内容的提问来源于stack exchange,提问作者Dinesh Thirumurugan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:57:03