Tableau d'affichage en tant qu'image matricielle en python

j'ai un tableau numpy en Python et j'aimerais l'afficher sur l'écran comme une image raster. Quelle est la façon la plus simple de faire cela? Il n'a pas besoin d'être particulièrement fantaisiste ou d'avoir une interface agréable, tout ce que je dois faire est d'afficher le contenu du tableau comme une image matricielle en échelle de gris.

j'essaie de faire la transition d'une partie de mon code IDL vers Python avec NumPy et je suis à la recherche d'un remplaçant pour le tv et tvscl commandes in IDL.

19
demandé sur robintw 2010-10-08 02:19:04

3 réponses

selon vos besoins, soit matplotlib imshow ou glumpy sont probablement les meilleures options.

Matplotlib est infiniment plus flexible, mais plus lent (les animations en matplotlib peuvent être étonnamment exigeantes en ressources même si vous faites tout correctement.). Cependant, vous aurez une bibliothèque de tracé vraiment merveilleux, complet-présenté à votre disposition.

Glumpy est parfaitement adapté pour l'affichage et l'animation rapides et openGL 2D tableau numpy, mais est beaucoup plus limité dans ce qu'il fait. Si vous avez besoin pour animer une série d'images ou d'afficher les données en temps réel, c'est une option bien meilleure que matplotlib.

en utilisant matplotlib (en utilisant l'API de pyplot au lieu de 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()

à l'Aide de 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()
28
répondu Joe Kington 2010-10-07 22:46:45

en utilisant ipython en mode interactif pylab, vous pouvez faire:

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

ou pas dans pylab mode:

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

ou sans le pylab espace de noms de la chose:

$ ipython
In [1]: import matplotlib.pyplot as pyplot
In [2]: pyplot.imshow(your_array)
In [3]: pyplot.show()
4
répondu Thomas 2017-07-23 19:38:53

ajout rapide: pour afficher avec matplotlib, si vous voulez que l'image apparaisse "raster", c'est-à-dire pixelisée sans lissage, alors vous devriez inclure l'option interpolation='la plus proche' dans l'appel à imshow.

2
répondu mdurant 2014-07-31 15:01:07