Python Matplotlib在图像上绘制不带背景的图像

0 投票
1 回答
42 浏览
提问于 2025-04-14 18:00

我有两张图片(第一张是单通道的浮点数格式,第二张是RGB的无符号8位整数格式,这两张图片的大小是一样的):

第一张图片 第二张图片

我想把第二张图片放在第一张图片上面,要求第二张图片中的黑色部分变得透明,而红色部分则要显示出来。

我该如何通过MatplotLib来实现这个效果呢?

1 个回答

2

你可以使用矩阵操作的方法来混合你的图像,只要满足某些条件。

比如:

img3=np.where(img2 < 10 , img1, img2)

这样做会生成一张新图像,图像中所有值小于10的地方会被img1的值替换掉。

唯一需要注意的是,这两张图像必须大小相同,或者至少它们的值可以调整到相同的大小。

(np是numpy的缩写)

如果一张图是uint格式,另一张是float32格式,你需要先转换其中一张。从你提供的图像来看,它们基本上都是单通道的,所以我建议把RGB格式的图像也转换成单通道:

比如可以用下面的方式:

  img_bw= img_rgb @ [0.33,0.33,0.33] / 255.0 

这样可以把它们从整数转换为浮点数,并且计算三个颜色通道的平均值,浮点数的范围是0.0到1.0。

另外,你也可以用不同的颜色通道来表示最终图像中的不同源图像。

还有一个选择是在显示图像时使用imshow的alpha选项。

  plt.imshow(img1)
  plt.imshow(img2,alpha=np.where(img2 < 10,1.0,0.0))

撰写回答