在python中将数组显示为光栅图像

时间:2010-10-07 22:19:04

标签: python image image-processing numpy

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

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

3 个答案:

答案 0 :(得分:28)

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

Matplotlib无限灵活,但速度较慢(即使你做的一切都很正确,matplotlib中的动画也可能是资源密集型的。)但是,您将拥有一个非常精彩,功能齐全的绘图库供您使用。

Glumpy非常适合基于OpenGL的快速显示和2D numpy阵列的动画,但它的功能更加有限。如果你需要实时制作一系列图像或显示数据,那么它比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()

答案 1 :(得分: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 :(得分:2)

快速添加:用于使用matplotlib进行显示,如果你想要图像出现"光栅",即没有平滑的像素化,那么你应该包括选项interpo =' nearest'在致电imshow。