webentwicklung-frage-antwort-db.com.de

Wie konvertiere ich ein Numpy-Array in ein Bild (und zeige es an)?

Ich habe ein Array folgendermaßen erstellt:

import numpy as np
data = np.zeros( (512,512,3), dtype=np.uint8)
data[256,256] = [255,0,0]

Ich möchte, dass ein einzelner roter Punkt in der Mitte eines 512x512-Bildes angezeigt wird. (Zumindest am Anfang ... ich denke, ich kann den Rest von dort herausfinden)

179
jlswint

Mit PIL können Sie ein Bild erstellen (und anzeigen):

from PIL import Image
import numpy as np

w, h = 512, 512
data = np.zeros((h, w, 3), dtype=np.uint8)
data[256, 256] = [255, 0, 0]
img = Image.fromarray(data, 'RGB')
img.save('my.png')
img.show()
174
unutbu

Folgendes sollte funktionieren:

from matplotlib import pyplot as plt
plt.imshow(data, interpolation='nearest')
plt.show()

Wenn Sie Jupyter notebook/lab verwenden, verwenden Sie diesen Inline-Befehl, bevor Sie matplotlib importieren:

%matplotlib inline 
235
Steve Tjoa

Der kürzeste Weg ist, scipy wie folgt zu verwenden:

from scipy.misc import toimage
toimage(data).show()

Dazu muss auch PIL oder Pillow installiert sein.

Ein ähnlicher Ansatz, der auch PIL oder Pillow erfordert, aber möglicherweise einen anderen Betrachter aufruft ist:

from scipy.misc import imshow
imshow(data)
51
Peter Hansen

Mit pygame können Sie ein Fenster öffnen, die Oberfläche als Array von Pixeln abrufen und von dort aus nach Belieben bearbeiten. Sie müssen Ihr Numpy-Array jedoch in das Surface-Array kopieren, was sehr viel langsamer ist, als die eigentlichen Grafikoperationen auf den Pygame-Oberflächen selbst durchzuführen.

3
Stefan Kendall

Die Python Imaging Library kann Bilder mit Numpy-Arrays anzeigen. Schauen Sie sich diese Seite für Beispielcode an:

BEARBEITEN: Wie der Hinweis am Ende dieser Seite besagt, sollten Sie die neuesten Versionshinweise lesen, um dies zu vereinfachen:

http://effbot.org/zone/pil-changes-116.htm

0
ars