您可以使用蒙版数组或通过设置RGBA图像中的alpha值来实现半透明覆盖。这两种方法都是经过处理的(用三个半透明的红色正方形放在圆形图案上的例子),它们给出了相似的图像(所以我只展示一个):
from pylab import *
from numpy import ma
x = y = linspace(-6, 6, 100)
X, Y = meshgrid(x, y)
z3 = X*X + Y*Y # circular pattern
# first, do this with a masked array
figure()
# z4 = 3 diagonal square
# zm = a uniform image (ones), with a mask of squares (~z4)
z4 = np.repeat(np.repeat(eye(3, dtype=bool), 40, axis=0), 40, axis=1)
zm = ma.masked_where(~z4, ones((120,120)))
imshow(z3, cmap=cm.jet)
imshow(zm, cmap=cm.bwr, alpha=.3, vmin=0, vmax=1) #cm.bwr is an easy way to get red
# do this by changing alpha for each pixel
figure()
z5 = zeros((120, 120, 4), dtype=float)
z5[..., 0] = 1
z5[..., 3] = .4*z4.astype(float)
imshow(z3, cmap=cm.jet)
imshow(z5)
show()
我认为这两种方法在所有情况下都能产生相同的结果,但是:
1。如果遮罩或构图变得复杂,则遮罩数组可以是一种更直接的方法,并且遮罩使您在绘制覆盖图像时更为灵活,因为例如,您可以使用彩色贴图而不是为每个像素指定完整的RGBA,但是,
2.遮罩数组方法不像RGBA那样提供对alpha值的完全逐像素控制。在
^{pr2}$
这有点疯狂,但事情是这样的:主图像是一个从蓝色到红色的圆形图案(z3)。然后有一些垂直的条带,可以模糊地遮住这个(z1),但只在图形的一半,在另一半的窄的交替对角线带(由于遮罩)。下面是一个使用遮罩数组的更复杂的图像: