我在Python中获得了一个numpy数组,我想将它作为一个光栅图像显示在屏幕上。什么是最简单的方法来做到这一点?它不需要特别花哨,或者有一个很好的界面,我所需要做的就是将数组的内容显示为灰度栅格图像。在python中显示数组作为光栅图像
我试图将一些IDL代码转换为Python和NumPy,并且基本上是在IDL中寻找tv
和tvscl
命令的替代品。
我在Python中获得了一个numpy数组,我想将它作为一个光栅图像显示在屏幕上。什么是最简单的方法来做到这一点?它不需要特别花哨,或者有一个很好的界面,我所需要做的就是将数组的内容显示为灰度栅格图像。在python中显示数组作为光栅图像
我试图将一些IDL代码转换为Python和NumPy,并且基本上是在IDL中寻找tv
和tvscl
命令的替代品。
根据您的需求,matplotlib's imshow
或glumpy可能是最好的选择。
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()
在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()
快速增加:与matplotlib显示,如果你想要的形象出现“光栅“,即没有平滑的像素化,那么你应该在imshow的调用中包含选项interpolation ='nearest'。
再次感谢@Joe,[这个答案让我解决了我自己的问题!](http://stackoverflow.com/questions/5003094/how-can-i-speed-up-an-animation/5471487#5471487) – 2011-03-29 11:11:18