2010-01-30 6 views
14

J'utilise numpy pour construire des tableaux de pixels. Une image 800x600 est un tableau en trois dimensions de uint8, 800x600x3. J'ai aussi un tableau similaire avec un motif fixe (un damier, voir here). J'ai un autre tableau, 800x600 de valeurs de masque. Lorsque le masque est zéro, je veux copier le pixel du motif sur le pixel de l'image. Lorsque le masque n'est pas nul, je veux laisser le pixel d'image seul.Utilise numpy pour masquer une image avec un motif?

>>> image.shape 
(800, 600, 3) 
>>> chex.shape 
(800, 600, 3) 
>>> mask.shape 
(800, 600) 

Cela se sent comme il devrait fonctionner:

image[mask == 0,...] = chex 

mais donne "ValueError: tableau est diffusable ne pas corriger la forme".

Que dois-je utiliser pour copier des pixels chex sur des pixels d'image où le masque est nul?

Répondre

12
idx=(mask==0) 
image[idx]=chex[idx] 

Notez que image a une forme (800,600,3), tandis que idx a une forme (800600). The rules pour l'état d'indexation

if the selection tuple is smaller than n, then as many : objects as needed are added to the end of the selection tuple so that the modified selection tuple has length N.

Ainsi les tableaux d'indexation ont une sorte de capacité de diffusion de leur propre. La forme de idx est promue à (800,600, :)

0

Essayez:

image[mask[:] == 0,...] = chex[mask[:] == 0,...] 
+0

"ValueError: tableau est diffusable ne pas corriger la forme" –

0

J'ai utilisé des tableaux de 8x6x3, 8x6x3 et 8x6 pour représenter votre tableau d'image, matrice de vérificateur et tableau de masque respectivement.

# first create mini-versions of your arrays: 
mask = NP.random.random_integers(0, 1, 48).reshape(8, 6) 
img = NP.random.random_integers(3, 9, 8*6*3).reshape(8, 6, 3) 
chk = NP.ones((8, 6, 3)) 

# all the work done in these two lines 
mask = mask[:,:,NP.newaxis] 
res = NP.where(mask==0, chk, img) 
+0

Les formes des trois images, 'mask.shape (8, 6), chk.shape (8, 6, 3) et img.shape (8, 6, 3) 'ne semble pas correspondre à l'exigence de« np.where ». – Gathide

Questions connexes