Показать массив как растровое изображение в Python - PullRequest
19 голосов
/ 08 октября 2010

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

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

Ответы [ 3 ]

28 голосов
/ 08 октября 2010

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

Matplotlib бесконечно более гибок, но медленнее (анимации в matplotlib могут быть удивительно ресурсоемкими, даже если вы все делаете правильно).Тем не менее, в вашем распоряжении будет действительно замечательная, полнофункциональная библиотека для построения графиков.

Glumpy идеально подходит для быстрого отображения на основе openGL и анимации двумерного массива, но гораздо более ограничен вчто оно делает.Если вам нужно анимировать серию изображений или отображать данные в режиме реального времени, это гораздо лучший вариант, чем matplotlib.

Использование matplotlib (с использованием API pyplot вместо 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()

Использование клейкой:

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()
4 голосов
/ 08 октября 2010

Используя 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 голосов
/ 31 июля 2014

Быстрое добавление: для отображения с помощью matplotlib, если вы хотите, чтобы изображение выглядело "растровым", то есть в пикселях без сглаживания, тогда вы должны включить опцию interpolation = 'near' в вызове imshow.

...