代码之家  ›  专栏  ›  技术社区  ›  Hooked

Pylab中的可变α混合

  •  7
  • Hooked  · 技术社区  · 16 年前

    如何在Pylab中控制二维图像的透明度?我想给出两组值 (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混合的一般方法。

    1 回复  |  直到 16 年前
        1
  •  8
  •   Justin Peel    16 年前

    你可以做的一件事是修改你放入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)
    

    你可能会找到一个更优雅的方式来做这个,但希望你能得到这个想法。