2010-10-07 2 views
16

Mam tablicę numpy w Pythonie i chciałbym wyświetlić ją na ekranie jako obraz rastrowy. Jaki jest najprostszy sposób to zrobić? Nie musi być szczególnie fantazyjny lub mieć ładny interfejs, wszystko, co muszę zrobić, to wyświetlić zawartość tablicy jako obraz rastrowy w skali szarości.Wyświetlaj tablicę jako obraz rastrowy w pytonie

Próbuję przenieść część mojego kodu IDL do Pythona za pomocą NumPy i po prostu szukam zamiennika dla poleceń tv i tvscl w IDL.

Odpowiedz

25

W zależności od potrzeb, prawdopodobnie najlepszymi opcjami są: matplotlib's imshow lub glumpy.

Matplotlib jest nieskończenie bardziej elastyczny, ale wolniejszy (animacje w matplotlib mogą być zaskakująco intensywne, nawet jeśli wszystko robisz dobrze.). Będziesz jednak miał do dyspozycji naprawdę wspaniałą, w pełni funkcjonalną bibliotekę kreślarską.

Glumpy doskonale nadaje się do szybkiego, opartego na OpenGL wyświetlania i animacji dwuwymiarowej tablicy numerycznej, ale jest znacznie bardziej ograniczony w tym, co robi. Jeśli chcesz animować serię obrazów lub wyświetlać dane w czasie rzeczywistym, jest to znacznie lepsza opcja niż matplotlib.

Korzystanie matplotlib (używając API pyplot zamiast 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() 

Korzystanie 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

Jeszcze raz dziękuję @Joe, [ta odpowiedź pozwoliła mi rozwiązać moje własne pytanie!] (Http://stackoverflow.com/questions/5003094/how-can-i-speed-up-an-animation/5471487#5471487) –

4

Korzystanie ipython w pylab trybie interaktywnym, można zrobić:

$ ipython pylab 
In [1]: imshow(your_array) 

lub nie w trybie pylab:

$ ipython 
In [1]: from pylab import * 
In [2]: imshow(your_array) 
In [3]: pylab.show() 

lub bez rzeczy namespace pylab:

$ ipython 
In [1]: import matplotlib.pyplot as pyplot 
In [2]: pyplot.imshow(your_array) 
In [3]: pyplot.show() 
2

Szybkie Ponadto: do wyświetlania z matplotlib, jeśli chcesz, by pojawić się „raster ", tzn. pikselizowane bez wygładzania, należy włączyć opcję" interpolacja = "najbliższa" w wywołaniu do pokazania.