Dites que j'ai une image en couleur, et cela sera naturellement représenté par un tableau à 3 dimensions en python, disons de forme (n x m x 3) et appelez-le img.
Je veux un nouveau tableau 2-d, appelez-le "narray" pour avoir une forme (3, nxm), telle que chaque ligne de ce tableau contient la version "aplatie" des canaux R, G et B. respectivement. De plus, il devrait avoir la propriété de pouvoir facilement reconstituer n'importe quel canal d'origine par quelque chose comme:
narray[0,].reshape(img.shape[0:2]) #so this should reconstruct back the R channel.
La question est de savoir comment puis-je construire le "narray" à partir de "img"? Le simple img.reshape (3, -1) ne fonctionne pas car l'ordre des éléments n'est pas souhaitable pour moi.
Merci
Vous devez utiliser np.transpose
pour réorganiser les dimensions. Maintenant, n x m x 3
doit être converti en 3 x (n*m)
, envoyez donc le dernier axe au premier plan et décalez à droite l'ordre des axes restants (0,1)
. Enfin, remettez en forme pour avoir 3
lignes. Ainsi, la mise en œuvre serait -
img.transpose(2,0,1).reshape(3,-1)
Exemple de cycle -
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]])
Si vous avez installé le module scikit, vous pouvez utiliser rgb2grey (ou rgb2gray) pour créer une photo de couleur en gris (de 3D à 2D).
depuis skimage import io, couleur
lina_color = io.imread (chemin + img) lina_gray = color.rgb2gray (lina_color)
Dans [33]: lina_color.shape Out [33]: (1920, 1280, 3)
Dans [34]: lina_gray.shape Out [34]: (1920, 1280)
Disons que nous avons un tableau img
de taille m x n x 3
à transformer en un tableau new_img
de taille 3 x (m*n)
new_img = img.reshape((img.shape[0]*img.shape[1]), img.shape[2])
new_img = new_img.transpose()