Python 如何在mayavi(imshow)中绘制彩色图像
是否可以使用mayavi绘制具有3个颜色通道的图像?根据mayavi的文档,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.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()