2017-05-08 5 views
2

Ich habe Bild entweder im RGB-Format oder Graustufen-Format (ich konvertierte es durch Gimp, sagen wir mal), jetzt jedes Mal, wenn ich das Bild in Graustufen, oder einfach in Graustufen Format transformieren, sagt die Form immer [Höhe, Breite] ohne die dritte Dimension (Anzahl der Farbkanäle).Wie konvertiert man ein schwarzes und weißes Bild in ein Array mit 3 Dimensionen in Python?

Ich weiß, dass in der Regel s/w-Bilder in einem solchen Format gespeichert werden, aber ich muss speziell die [height, width, 1] Bildform, das Sie mit bekommen würde, sagen wir mal:

numpy.zeros(shape=[400, 400, 1]) 
+0

Hat einer von der gebuchten Lösung für Sie arbeiten? – Divakar

+1

Ja, beide Lösungen haben funktioniert, ich habe vergessen, einen von ihnen als akzeptiert zu markieren, danke für die Erinnerung! – danchy

Antwort

2

Sie können immer „leer hinzufügen "Abmessungen unter Verwendung np.expand_dims:

>>> a2d = np.ones((100, 200)) 
>>> a3d = np.expand_dims(a, axis=2) 
>>> a3d.shape 
(100, 200, 1) 

oder durch Schneiden mit None oder np.newaxis:

>>> a2d[..., None].shape # instead of "..." (Ellipsis) you could also use `[:, :, None]` 
(100, 200, 1) 

Ich bevorzuge , weil es ein bisschen expliziter darüber ist, was passiert als Slicing.


Wenn Sie es bedingt benötigen, überprüfen Sie arr.ndim zuerst:

if arr.ndim == 2: 
    arr = np.expand_dims(arr, axis=2) 
2

Es gibt eine für diesen Zweck np.atleast_3d genau in-built -

np.atleast_3d(img) 

Diese integrierte in nimmt Halten der Ausgangsform, um zu sein, indem eine neue Achse als die letzte für eine 2D-Anordnung angefügt wird und keine Änderung für einevornimmtEingang, alles unter den Hauben gepflegt.

Probelauf -

In [42]: img = np.random.randint(0,255,(800,600)) # grayscale img 

In [43]: np.atleast_3d(img).shape 
Out[43]: (800, 600, 1) 

In [44]: img = np.random.randint(0,255,(800,600,3)) # RGB img 

In [45]: np.atleast_3d(img).shape 
Out[45]: (800, 600, 3) 
+0

Ich habe nur 'np.array versucht (img, ndmin = 3, copy = False)' aber das reicht nur Dimensionen voraus. Gut zu wissen, dass sie eine andere Funktion zum Anhängen von Dimensionen haben. :) – MSeifert

+0

Eine andere Sache "das kümmert es unter der Haube" klingt falsch. Meinst du "das kümmert sich darum ..."? – MSeifert

+1

@MSeifert Da waren die Worte knapp. Redigiert, um mehr Sinn zu machen. – Divakar

Verwandte Themen