Python 中 RGB 数据到拜耳格式的转换

问题描述 投票:0回答:2

我目前正在从事 HIL 仿真工作。我正在使用 CARLA 平台,存在一个 RGB 相机传感器,通过它我可以获得图像帧的 RGB 数据值(3D 数组(高度、宽度、3(RGB)))。我想通过网络层发送数据,.....

问题是我想将 RGB 格式转换为拜耳格式数组。我不太清楚拜耳原始过滤器的细节。我注意到有一个用于 Bayer 到 RGB 转换的 Opencv 标志,但反之则不然。我需要这种格式来重用图像解包或服务器端的库。

任何有关从 RGB 到拜耳格式转换的建议都会帮助我进一步推动这个项目。

参考(图片参考 - 我想从右到左进行)- https://theailearner.com/2018/10/28/bayer-filter/

python opencv rgb imagefilter carla
2个回答
2
投票

这是一个naive代码,用于在您拥有的链接中生成第一个拜耳模式(GRBG?):

import numpy as np # of course

im = cv.imread(...)
(height, width) = im.shape[:2]
(B,G,R) = cv.split(im)

bayer = np.empty((height, width), np.uint8)

# strided slicing for this pattern:
#   G R
#   B G
bayer[0::2, 0::2] = G[0::2, 0::2] # top left
bayer[0::2, 1::2] = R[0::2, 1::2] # top right
bayer[1::2, 0::2] = B[1::2, 0::2] # bottom left
bayer[1::2, 1::2] = G[1::2, 1::2] # bottom right

这模拟了图像形成。您可能需要稍微低通 (

GaussianBlur
) 输入,否则您会看到有趣的混叠伪像。


0
投票

感谢 Christoph Rackwithz 的贡献!然而,R 和 B 通道采样的代码似乎已被交换。这是修改后的代码:

之前:

bayer[0::2, 0::2]= G[0::2, 0::2]# top left
bayer[0::2, 1::2]= R[0::2, 1::2]# top right
bayer[1::2, 0::2]= B[1::2, 0::2]# bottom left
bayer[1::2, 1::2]= G[1::2, 1::2]# bottom right

之后:

bayer[0::2, 0::2]= G[0::2, 0::2] # top left
bayer[1::2, 0::2]= R[1::2, 0::2] # top right
bayer[0::2, 1::2]= B[0::2, 1::2] # bottom left
bayer[1::2, 1::2]= G[1::2, 1::2] # bottom right
© www.soinside.com 2019 - 2024. All rights reserved.