在matplotlib版本上测试:'3.5.2'和3.6.0
这感觉像一个错误,但我不确定我是否错过了什么时,使用彩色图像与阿尔法掩码。
我有两个图像A和B。
B应该作为一个覆盖应用,并有三个颜色通道。大多数像素是0,这将被过滤掉的阿尔法掩码。
第一次
现在的问题是,当我想把它们组合起来的时候,我得到了完整的图像B。
此设置中未使用每像素Alpha:
plt.imshow(A)
plt.imshow(B, alpha=alphas)
plt.title("result")
plt.show()
当我将B降低到灰度时,它会按预期工作,但很明显,它使用的是cmap,而不是我的颜色通道。
plt.imshow(A)
plt.imshow(B[:,:,0], alpha=alphas)
plt.title("one channel result")
plt.show()
指令集
MRE代码:
import matplotlib as m
import matplotlib.pyplot as plt
import numpy as np
A=np.arange(5*5*3).reshape((5,5,3)) / (5*5*3)
plt.imshow(A)
plt.title("A")
plt.show()
B = np.zeros(5*5*3).reshape((5,3,5))
B[2:4, 2:4] = 1
B.shape = (5,5,3) # do some shifting so its not grayscale
plt.imshow(B)
plt.title("B")
plt.show()
alphas = np.zeros(5*5).reshape((5,5))
alphas[B[:,:,1] > 0] = 0.66
plt.imshow(alphas)
plt.title("Alpha mask")
plt.show()
plt.imshow(A)
plt.imshow(B, alpha=alphas) # gives wrong result
plt.title("wrong result")
plt.show()
1条答案
按热度按时间am46iovg1#
我把“alpha”作为一个5x5的数组来测试,但是“imshow”忽略了这个数组,所以我把“B”和一个“alpha”列连接起来,得到了一个(5x5x4)RGBA矩阵,叫做“C”。
因此,您不需要在“imshow”中传递“alpha”数组参数。