在Python中将数组显示为栅格图像

23 投票
3 回答
45284 浏览
提问于 2025-04-16 05:10

我在Python中有一个numpy数组,我想把它显示成一个栅格图像。最简单的方法是什么?我不需要特别花哨或者有漂亮的界面,我只需要把数组的内容显示成灰度的栅格图像。

我正在尝试把一些IDL代码转到Python和NumPy,基本上是在寻找IDL中tvtvscl命令的替代方法。

3 个回答

3

补充一下:如果你想用matplotlib显示图片,并且希望图片看起来是“像素化”的,也就是不经过平滑处理的那种效果,那么在调用imshow的时候,你需要加上选项interpolation='nearest'。

7

在使用ipython的pylab交互模式时,你可以这样做:

$ 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()
33

根据你的需求,matplotlib的imshow或者glumpy可能是最好的选择。

matplotlib的灵活性非常高,但速度较慢(即使你做得再好,matplotlib中的动画也可能会消耗很多资源)。不过,你会拥有一个功能非常强大的绘图库。

glumpy非常适合快速、基于OpenGL的2D numpy数组的显示和动画,但它的功能相对有限。如果你需要对一系列图像进行动画处理或实时显示数据,glumpy比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()

撰写回答