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

如何用Matplotlib将黑底透明的RGB图像叠加在单波段图像上?

用Matplotlib实现图像叠加(黑色透明、红色保留)

实现步骤

  1. 导入依赖库:使用matplotlib.pyplot负责绘图,numpy处理图像数组操作。
  2. 生成透明通道(Alpha Channel):针对第二张RGB图,把黑色区域(RGB值均为0)标记为完全透明(alpha=0),其余区域(包括红色)保持不透明(alpha=1)。
  3. 转换为RGBA格式:将原RGB图与生成的alpha通道合并为RGBA图像,注意把alpha通道值转为0-255范围内的uint8格式,符合图像显示要求。
  4. 叠加显示:先绘制第一张单波段图,再叠加带透明效果的第二张图。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 假设已加载目标图像:im1为单波段float32(尺寸H×W),im2为RGB uint8(尺寸H×W×3)
# 以下为测试图像生成代码,实际使用时替换为你的图像加载逻辑
im1 = np.random.rand(256, 256).astype(np.float32)  # 随机生成单波段float32图
im2 = np.zeros((256, 256, 3), dtype=np.uint8)
im2[50:150, 50:150] = [255, 0, 0]  # 绘制红色方块,其余区域为黑色

# 生成alpha通道:黑色区域设为0,其余区域设为1
alpha = np.where((im2[:, :, 0] == 0) & (im2[:, :, 1] == 0) & (im2[:, :, 2] == 0), 0, 1)
# 合并为RGBA格式,alpha通道转为0-255的uint8类型
im2_rgba = np.dstack((im2, (alpha * 255).astype(np.uint8)))

# 执行叠加显示
plt.figure(figsize=(8, 8))
# 显示第一张单波段图,可自定义colormap(如viridis、gray等)
plt.imshow(im1, cmap='viridis')
# 叠加带透明效果的第二张图
plt.imshow(im2_rgba)
plt.axis('off')  # 隐藏坐标轴
plt.show()

细节调整

  • 处理接近黑色的区域:如果需要将接近黑色的区域也设为透明,可调整alpha通道的判断阈值,比如RGB值均小于10:
    alpha = np.where((im2[:, :, 0] < 10) & (im2[:, :, 1] < 10) & (im2[:, :, 2] < 10), 0, 1)
    
  • 单波段图显示范围:如果单波段图的数值范围不是0-1,可通过vmin和vmax参数指定显示范围,避免自动归一化导致的颜色偏差:
    plt.imshow(im1, cmap='viridis', vmin=0, vmax=255)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:12:32