7

如何在 pylab 中控制 2D 图像的透明度?我想给出两组值(X,Y,Z,T),其中X,Y是位置数组,Z是颜色值,T是函数的透明度,imshow但似乎该函数仅将 alpha 作为标量。作为一个具体的例子,考虑下面的代码,它试图显示两个高斯。值越接近零,我希望情节越透明。

from pylab import *

side = linspace(-1,1,100)
X,Y  = meshgrid(side,side)

extent = (-1,1,-1,1)

Z1  = exp(-((X+.5)**2+Y**2))
Z2  = exp(-((X-.5)**2+(Y+.2)**2))

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent)
imshow(Z2, cmap=cm.hsv, alpha=.6, extent=extent)
show()

注意:我不是在寻找 Z1+Z2 的图(这将是微不足道的),而是寻找一种指定图像中 alpha 混合的通用方法。

4

1 回答 1

8

您可以做的一件事是修改您放入 imshow 的内容。第一个变量可以是您使用的灰度值,也可以是 RGB 或 RGBA 值。如果您使用 RGB/RGBA 值,则 cmap 将被忽略。例如,

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent)

将生成相同的图像

imshow(cm.hsv(Z1), alpha=.6, extent=extent)

因为cm.hsv()只返回 RGBA 值。如果您看一下它返回的值,它们都具有 1.0 作为 A 值(透明度)。因此,使可变透明度的一种方法是这样的:

def mycmap(x):
    tmp = cm.hsv(x)
    for i in xrange(tmp.shape[0]):
        for j in xrange(tmp.shape[0]):
            tmp[i,j][3] = somefunction of x[i,j] that generates the transparency
    return tmp

imshow(mycmap(Z1), extent=extent)
imshow(mycmap(Z2), extent=extent)

您可能会找到一种更优雅的方式来执行此操作,但希望您能理解。

于 2010-03-22T21:27:34.587 回答