2 votes

En Python, la forme d'une image avec un seul canal est un problème

J'ai pris une image RVB 256x256 et je l'ai convertie en YCbCr,

J'ai créé un code pour importer seulement le canal Y

Voici mon code :

from PIL import Image
import numpy as np

im = Image.open ('test.bmp')
img = im.convert ('YCbCr')
arr_img = np.asarray (img)
arr_img = arr_img [:,:, 0]

img = Image.fromarray (arr_img)
img.show ()

Après avoir fait cela, j'ai créé une image avec le canal Y que je voulais.

J'étais heureux

Mais le problème vient d'ici.

J'ai exécuté ce code

print (np.shape (arr_img))

Ici, ce que je veux est (256, 256, 1).

Cependant, le code ci-dessus produit (256, 256).

J'ai donc changé "arr_img = arr_img [ :,:, 0]" en "arr_img = arr_img [ :, :, :1]".

Cependant, il n'a pas été exécuté en raison d'une erreur.

J'ai transformé l'image RVB en une image avec trois canaux de YCbCr,

Je pensais que ce serait la taille (256, 256, 1) quand j'ai importé seulement le premier canal, "Y".

Comment puis-je obtenir la forme de (256, 256, 1) ?

2voto

N.G Points 192

Une possibilité est d'ajouter à la main la dimension manquante :

arr_img = np.zeros( [256,256] )

arr_img = arr_img.reshape( * arr_img.shape, 1 )

1voto

Raj Points 31

Numpy a une fonction intégrée np.expand_dims() pour ajouter une dimension supplémentaire.

Ejemplo:

a = np.random.randn(2,3)

a.shape

(2, 3)

a = np.expand_dims(a, axis=2)

a.shape

(2, 3, 1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X