如何将黑白Bayer Pattern图像转为彩色Bayer Pattern图像?
问题原因及解决方案
你的代码生成的是单通道灰度图像,所以保存后显示为黑白。因为你创建的bayer是(height, width)维度的单通道数组,没有色彩通道信息,自然无法呈现彩色Bayer滤镜效果。
要生成带色彩的Bayer图案,需要创建三通道彩色图像,让每个颜色通道只保留对应Bayer位置的像素值,其余位置设为0(模拟真实Bayer传感器每个像素只捕获一种颜色的特性)。
修改后的代码
import numpy as np import cv2 # 读取原图并缩小 im = cv2.imread('/content/drive/MyDrive/Colab Notebooks/Resources/lena.bmp') im = cv2.resize(im, None, fx=1/3, fy=1/3, interpolation=cv2.INTER_NEAREST) height, width = im.shape[:2] B, G, R = cv2.split(im) # 创建三通道空数组,初始值为0 bayer_color = np.zeros((height, width, 3), dtype=np.uint8) # 按照Bayer模式(G R / B G)为每个通道赋值 # 绿色通道:填充两个G的位置 bayer_color[0::2, 0::2, 1] = G[0::2, 0::2] # 左上G bayer_color[1::2, 1::2, 1] = G[1::2, 1::2] # 右下G # 红色通道:填充R的位置 bayer_color[0::2, 1::2, 2] = R[0::2, 1::2] # 右上R # 蓝色通道:填充B的位置 bayer_color[1::2, 0::2, 0] = B[1::2, 0::2] # 左下B # 放大回原尺寸 bayer_color = cv2.resize(bayer_color, None, fx=3, fy=3, interpolation=cv2.INTER_NEAREST) # 保存彩色Bayer图像 cv2.imwrite('/content/drive/MyDrive/Colab Notebooks/Resources/bayer_color.png', bayer_color)
关键修改点
- 将单通道的
np.empty((height, width), np.uint8)改成三通道的np.zeros((height, width, 3), dtype=np.uint8),预留色彩通道空间。 - 赋值时指定第三个维度(通道索引):OpenCV中通道顺序是B(0)、G(1)、R(2),对应赋值到各自通道的对应位置。
- 每个通道只保留对应Bayer位置的像素,其余位置为0,合成后就能呈现彩色的Bayer网格效果。
内容的提问来源于stack exchange,提问作者Junhyun Ahn
相关产品推荐
相关产品推荐

