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

如何将黑白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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:01:18