Utiliser numpy pour masquer une image avec un motif?
Je suis en utilisant numpy pour construire pixel tableaux. Une image en 800x600 est un 3-dimensions tableau de uint8, 800x600x3. J'ai aussi un tableau similaire avec un motif fixe (un damier, voir ici). J'ai un autre tableau, 800x600 des valeurs de masque. Lorsque le masque est égale à zéro, je veux copier le motif pixel de l'image en pixels. L'endroit où le masque n'est pas zéro, je veux quitter le pixel de l'image seule.
>>> 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 n'est pas broadcastable pour corriger la forme".
Que dois-je utiliser pour copier chex les pixels en pixels de l'image où le masque est égale à zéro?
OriginalL'auteur Ned Batchelder | 2010-01-30
Vous devez vous connecter pour publier un commentaire.
Noter que
image
a la forme (800,600,3), tandis queidx
a la forme (800,600). Les règles pour l'indexation de l'étatDonc l'indexation des tableaux ont une sorte de capacité de diffusion de leur propre.
idx
's de la forme devient promu (800,600,:)OriginalL'auteur unutbu
Je voulais illustrer un exemple d'utilisation de @unutbu réponse. Dans ce scénario, j'ai une image d'un chat que j'ai tourner. Cette rotation provoque des bords noirs que moche, surtout lorsqu'il est collé sur un non-arrière-plan noir.
Je trouve que les zones du masque et de remplacer ces valeurs avec l'arrière-plan d'origine des valeurs
Je tiens également à noter que
PIL.Image
(à partir de laPillow
bibliothèque) a la possibilité de coller une image sur une autre image avec moins d'étapes.OriginalL'auteur Jon
Essayer:
OriginalL'auteur ezod
J'ai utilisé des tableaux de 8x6x3, 8x6x3, et 8x6 représenter votre image, tableau, vérificateur de pile, puis le masque de tableau, respectivement.
mask.shape (8, 6), chk.shape (8, 6, 3) and img.shape (8, 6, 3)
ne semble pas correspondre à l'exigence denp.where.
OriginalL'auteur doug