374 Stimmen

Wie kann ich ein Numpy-Array in ein Bild konvertieren (und anzeigen)?

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 einen einzelnen roten Punkt in der Mitte eines 512x512 Bildes anzeigen. (Zumindest für den Anfang... Ich denke, ich kann den Rest von dort herausfinden)

443voto

Steve Tjoa Punkte 55411

Das Folgende 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 

Ein besserer Weg ist die Installation von ipyml pip install ipympl und verwenden

%matplotlib widget 

siehe eine exemple .

356voto

unutbu Punkte 769083

Sie können PIL verwenden, um ein Bild zu erstellen (und anzuzeigen):

from PIL import Image
import numpy as np

w, h = 512, 512
data = np.zeros((h, w, 3), dtype=np.uint8)
data[0:256, 0:256] = [255, 0, 0] # red patch in upper left
img = Image.fromarray(data, 'RGB')
img.save('my.png')
img.show()

53voto

Peter Hansen Punkte 20242

Hinweis: Diese beiden APIs wurden zunächst veraltet und dann entfernt.

Der kürzeste Weg ist die Verwendung von scipy etwa so:

# Note: deprecated in v0.19.0 and removed in v1.3.0
from scipy.misc import toimage
toimage(data).show()

Dazu muss auch PIL oder Pillow installiert sein.

Ein ähnlicher Ansatz, der ebenfalls PIL oder Pillow erfordert, aber die kann einen anderen Betrachter aufrufen es:

# Note: deprecated in v1.0.0 and removed in v1.8.0
from scipy.misc import imshow
imshow(data)

19voto

Hrvoje Punkte 9859

Wie zeigt man Bilder, die in einem Numpy-Array gespeichert sind, mit einem Beispiel (funktioniert im Jupyter-Notebook)

Ich weiß, dass es einfachere Antworten gibt, aber diese wird Ihnen ein Verständnis dafür vermitteln, wie Bilder tatsächlich aus einem Numpy-Array gezeichnet werden.

Beispiel laden

from sklearn.datasets import load_digits
digits = load_digits()
digits.images.shape   #this will give you (1797, 8, 8). 1797 images, each 8 x 8 in size

Array mit einem Bild anzeigen

digits.images[0]
array([[ 0.,  0.,  5., 13.,  9.,  1.,  0.,  0.],
       [ 0.,  0., 13., 15., 10., 15.,  5.,  0.],
       [ 0.,  3., 15.,  2.,  0., 11.,  8.,  0.],
       [ 0.,  4., 12.,  0.,  0.,  8.,  8.,  0.],
       [ 0.,  5.,  8.,  0.,  0.,  9.,  8.,  0.],
       [ 0.,  4., 11.,  0.,  1., 12.,  7.,  0.],
       [ 0.,  2., 14.,  5., 10., 12.,  0.,  0.],
       [ 0.,  0.,  6., 13., 10.,  0.,  0.,  0.]])

Leere 10 x 10 Subplots zur Visualisierung von 100 Bildern erstellen

import matplotlib.pyplot as plt
fig, axes = plt.subplots(10,10, figsize=(8,8))

Zeichnen von 100 Bildern

for i,ax in enumerate(axes.flat):
    ax.imshow(digits.images[i])

Ergebnis:

enter image description here

Was bedeutet axes.flat tun? Es erstellt einen Numpy-Enumerator, so dass Sie über Achsen iterieren können, um Objekte auf ihnen zu zeichnen. Exemple :

import numpy as np
x = np.arange(6).reshape(2,3)
x.flat
for item in (x.flat):
    print (item, end=' ')

9voto

user3322286 Punkte 79

Zum Beispiel mit dem fromarray von pillow:

from PIL import Image
from numpy import *

im = array(Image.open('image.jpg'))
Image.fromarray(im).show()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X