web-dev-qa-db-ger.com

numpy with python: Konvertiere ein 3D-Array in 2d

Angenommen, ich habe ein Farbbild, und natürlich wird dies durch ein 3-dimensionales Array in Python dargestellt, beispielsweise der Form (n x m x 3), und es wird img genannt.

Ich möchte ein neues 2D-Array, das als "narray" bezeichnet wird, um eine Form (3, nxm) zu haben, sodass jede Zeile dieses Arrays die "abgeflachte" Version des R-, G- bzw. B-Kanals enthält. Außerdem sollte es die Eigenschaft haben, dass ich jeden der ursprünglichen Kanäle durch etwas ähnliches wieder herstellen kann

narray[0,].reshape(img.shape[0:2])    #so this should reconstruct back the R channel.

Die Frage ist, wie ich aus "img" die "Erzählung" konstruieren kann. Das einfache img.reshape (3, -1) funktioniert nicht, da die Reihenfolge der Elemente für mich nicht erwünscht ist.

Vielen Dank

9
wudanao

Sie müssen np.transpose verwenden, um die Abmessungen neu anzuordnen. Nun soll n x m x 3 in 3 x (n*m) konvertiert werden, also die letzte Achse nach vorne schicken und die Reihenfolge der übrigen Achsen (0,1) nach rechts verschieben. Umformen, um 3 Zeilen zu haben. Die Implementierung wäre also -

img.transpose(2,0,1).reshape(3,-1)

Probelauf -

In [16]: img
Out[16]: 
array([[[155,  33, 129],
        [161, 218,   6]],

       [[215, 142, 235],
        [143, 249, 164]],

       [[221,  71, 229],
        [ 56,  91, 120]],

       [[236,   4, 177],
        [171, 105,  40]]])

In [17]: img.transpose(2,0,1).reshape(3,-1)
Out[17]: 
array([[155, 161, 215, 143, 221,  56, 236, 171],
       [ 33, 218, 142, 249,  71,  91,   4, 105],
       [129,   6, 235, 164, 229, 120, 177,  40]])
13
Divakar

Wenn Sie das Scikit-Modul installiert haben, können Sie mit rgb2grey (oder rgb2gray) ein Foto von Farbe bis Grau (von 3D nach 2D) erstellen. 

von der Skimage importieren, Farbe

lina_color = io.imread (Pfad + img) lina_gray = color.rgb2gray (lina_color)

In [33]: lina_color.shape Out [33]: (1920, 1280, 3)

In [34]: lina_gray.shape Out [34]: (1920, 1280)

0
Harry

Nehmen wir an, wir haben ein Array img der Größe m x n x 3, das in ein Array new_img der Größe 3 x (m*n) umgewandelt werden soll.

new_img = img.reshape((img.shape[0]*img.shape[1]), img.shape[2])
new_img = new_img.transpose()
0
yashgarg1232