2010-10-07 4 views
16

У меня есть массив numpy в Python, и я хотел бы отображать его на экране в виде растрового изображения. Каков самый простой способ сделать это? Это не должно быть особенно причудливым или иметь приятный интерфейс, все, что мне нужно сделать, это отобразить содержимое массива в виде растрового изображения в оттенках серого.Показать массив как растровое изображение в python

Я пытаюсь перевести часть моего кода IDL на Python с помощью NumPy и в основном ищут замену команд tv и tvscl в IDL.

ответ

25

В зависимости от ваших потребностей, matplotlib's imshow или glumpy, вероятно, являются лучшими вариантами.

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() 
+0

Еще раз спасибо @ Джо, [этот ответ заставил меня решить мой собственный вопрос!] (Http://stackoverflow.com/questions/5003094/how-can-i-speed-up-an-animation/5471487#5471487) –

4

Использование 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() 
2

Быстрый дополнение: для отображения с Matplotlib, если вы хотите сделать изображение «растр », то есть пикселировать без сглаживания, тогда вы должны включить опцию интерполяции =« ближайший »в вызове imshow.

Смежные вопросы