2010-10-07 37 views
16

我在Python中获得了一个numpy数组,我想将它作为一个光栅图像显示在屏幕上。什么是最简单的方法来做到这一点?它不需要特别花哨,或者有一个很好的界面,我所需要做的就是将数组的内容显示为灰度栅格图像。在python中显示数组作为光栅图像

我试图将一些IDL代码转换为Python和NumPy,并且基本上是在IDL中寻找tvtvscl命令的替代品。

回答

25

根据您的需求,matplotlib's imshowglumpy可能是最好的选择。

Matplotlib无限灵活,但速度更慢(matplotlib中的动画可能会令人惊讶地发现资源密集型,即使你做的都是正确的)。但是,您将拥有一个非常棒的功能齐全的绘图库供您使用。

Glumpy非常适合2D numpy阵列的快速,基于OpenGL的显示和动画,但是它的功能更为有限。但是,如果您需要实时动画显示一系列图像或显示数据,则这比matplotlib好得多。

使用matplotlib(使用pyplot API,而不是pylab):

import matplotlib.pyplot as plt 
import numpy as np 

# Generate some data... 
x, y = np.meshgrid(np.linspace(-2,2,200), np.linspace(-2,2,200)) 
x, y = x - x.mean(), y - y.mean() 
z = x * np.exp(-x**2 - y**2) 

# Plot the grid 
plt.imshow(z) 
plt.gray() 
plt.show() 

使用glumpy:

import glumpy 
import numpy as np 

# Generate some data... 
x, y = np.meshgrid(np.linspace(-2,2,200), np.linspace(-2,2,200)) 
x, y = x - x.mean(), y - y.mean() 
z = x * np.exp(-x**2 - y**2) 

window = glumpy.Window(512, 512) 
im = glumpy.Image(z.astype(np.float32), cmap=glumpy.colormap.Grey) 

@window.event 
def on_draw(): 
    im.blit(0, 0, window.width, window.height) 
window.mainloop() 
+0

再次感谢@Joe,[这个答案让我解决了我自己的问题!](http://stackoverflow.com/questions/5003094/how-can-i-speed-up-an-animation/5471487#5471487) – 2011-03-29 11:11:18

4

在pylab交互模式下使用IPython中,你可以这样做:

$ ipython pylab 
In [1]: imshow(your_array) 

或不pylab模式:

$ ipython 
In [1]: from pylab import * 
In [2]: imshow(your_array) 
In [3]: pylab.show() 

或不pylab命名空间的事情:

$ ipython 
In [1]: import matplotlib.pyplot as pyplot 
In [2]: pyplot.imshow(your_array) 
In [3]: pyplot.show() 
2

快速增加:与matplotlib显示,如果你想要的形象出现“光栅“,即没有平滑的像素化,那么你应该在imshow的调用中包含选项interpolation ='nearest'。