Python 如何在mayavi(imshow)中绘制彩色图像

Python 如何在mayavi(imshow)中绘制彩色图像,python,image,mayavi,Python,Image,Mayavi,是否可以使用mayavi绘制具有3个颜色通道的图像?根据mayavi的文档,mayavi.mlab.imshow只能处理形状(nx m)的图像。方法 我必须使用mayavi的自定义彩色地图,请参见 我制作了一个由原始(nxmx3)图像中的所有像素组成的彩色贴图。我还包括了一个alpha通道,这样可以正确显示透明的png。接下来,我使用灰度图像作为查找表,将像素值作为存储在colormap中的原始像素的索引。我用查找表作为输入图像创建了一个imshow对象,并用我的自定义colormap替换了im

是否可以使用mayavi绘制具有3个颜色通道的图像?根据mayavi的文档,
mayavi.mlab.imshow
只能处理形状(nx m)的图像。

方法 我必须使用mayavi的自定义彩色地图,请参见

我制作了一个由原始(nxmx3)图像中的所有像素组成的彩色贴图。我还包括了一个alpha通道,这样可以正确显示透明的png。接下来,我使用灰度图像作为查找表,将像素值作为存储在colormap中的原始像素的索引。我用查找表作为输入图像创建了一个imshow对象,并用我的自定义colormap替换了imshow对象的colormap

代码 下面是一些工作代码和测试用例,供感兴趣的人使用。除了pl.imread(…)中的testcase之外,任何地方都可以用Numpy(Pylab包装Numpy)替换Pylab。在Python2.7和Windows 7上的Mayavi 4.3.0上测试。(不幸的是,我必须首先修复Windows上的以下mayavi错误)

结果

load\u lut\u from_file
似乎无法在
imshow
中正常工作。这是唯一对我有效的方法

import pylab as pl
import numpy as np

from mayavi import mlab
from urllib import urlopen
from tvtk.api import tvtk

def test_mlab_imshowColor():
    """
    Test if mlab_imshowColor displays correctly by plotting the wikipedia png example image
    """
    #load a png with a scale 0->1 and four color channels (an extra alpha channel for transparency).
    url = 'http://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png'
    im = pl.imread(urlopen(url), format='png') * 255

    colors = tvtk.UnsignedCharArray()
    colors.from_array(im.transpose((1,0,2)).reshape(-1, 4))
    m_image = mlab.imshow(np.ones(im.shape[:2]))
    m_image.actor.input.point_data.scalars = colors

    mlab.points3d([-200, 300, -200, 300],
                  [-200, 300, 200, -300],
                  [300, 300, 300, 300])

    mlab.draw()
    mlab.show()

if __name__ == "__main__":
    test_mlab_imshowColor()

谢谢你的代码,但是,它没有显示在我的机器骰子图像,只是一个从黑色到白色的灰色渐变平面。我这里用的是mayavi 4.5。在Mayavi 4.5上,我从那时起就没有使用过Mayavi,可惜它不再工作了。我只记得每一件小事都是相当大的代码斗争。
import pylab as pl
import numpy as np

from mayavi import mlab
from urllib import urlopen
from tvtk.api import tvtk

def test_mlab_imshowColor():
    """
    Test if mlab_imshowColor displays correctly by plotting the wikipedia png example image
    """
    #load a png with a scale 0->1 and four color channels (an extra alpha channel for transparency).
    url = 'http://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png'
    im = pl.imread(urlopen(url), format='png') * 255

    colors = tvtk.UnsignedCharArray()
    colors.from_array(im.transpose((1,0,2)).reshape(-1, 4))
    m_image = mlab.imshow(np.ones(im.shape[:2]))
    m_image.actor.input.point_data.scalars = colors

    mlab.points3d([-200, 300, -200, 300],
                  [-200, 300, 200, -300],
                  [300, 300, 300, 300])

    mlab.draw()
    mlab.show()

if __name__ == "__main__":
    test_mlab_imshowColor()