Ich habe ein einfaches Problem, kann aber keine gute Lösung finden.
Ich möchte ein numpy 2D-Array nehmen, das ein Graustufenbild darstellt, und es in ein RGB-PIL-Bild konvertieren, während einige der matplotlib-Farbkarten angewendet werden.
Ich kann eine vernünftige PNG-Ausgabe erhalten, indem ich pyplot.figure.figimage
Befehl:
dpi = 100.0
w, h = myarray.shape[1]/dpi, myarray.shape[0]/dpi
fig = plt.figure(figsize=(w,h), dpi=dpi)
fig.figimage(sub, cmap=cm.Gist_earth)
plt.savefig('out.png')
Obwohl ich dies anpassen könnte, um das zu bekommen, was ich will (wahrscheinlich mit StringIO, um das PIL-Bild zu bekommen), frage ich mich, ob es keinen einfacheren Weg gibt, dies zu tun, da es ein sehr natürliches Problem der Bildvisualisierung zu sein scheint. Sagen wir so etwas:
colored_PIL_image = magic_function(array, cmap)
Danke fürs Lesen!
Ziemlich viel los, aber hier ist es:
myarray
mit dem Maximalwert von 1.0
Normalisiert ist.myarray
an.0-255
.np.uint8()
in ganze Zahlen konvertieren.Image.fromarray()
.Und du bist fertig:
from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.Gist_earth(myarray)*255))
mit plt.savefig()
:
mit im.save()
:
Die in der akzeptierten Antwort beschriebene Methode hat bei mir auch nach Anwendung der in den Kommentaren genannten Änderungen nicht funktioniert. Aber unten hat einfacher Code funktioniert
import matplotlib.pyplot as plt
plt.imsave(filename, np_array, cmap='Greys')
np_array kann entweder ein 2D-Array mit Werten von 0..1 floats o2 0..255 uint8 sein und benötigt in diesem Fall cmap. Bei 3D-Arrays wird cmap ignoriert.