Maison >développement back-end >Tutoriel Python >Comment convertir efficacement les images PIL en tableaux NumPy pour les transformations de pixels ?

Comment convertir efficacement les images PIL en tableaux NumPy pour les transformations de pixels ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-12 13:24:02233parcourir

How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Transformations?

Conversion d'images PIL en tableaux NumPy pour des transformations de pixels efficaces

Lorsque vous travaillez avec des tâches de traitement d'image, il est souvent souhaitable de convertir un PIL ( Python Imaging Library) dans un tableau NumPy pour des transformations plus rapides au niveau des pixels. Cette conversion permet une manipulation efficace des données d'image, permettant des opérations d'image plus complexes et optimisées dans le temps.

Pour convertir une image PIL en tableau NumPy, on peut utiliser l'extrait de code suivant :

pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)

Ce code lit les données d'image de l'image PIL et les remodèle en un tableau NumPy tridimensionnel, où chaque dimension représente la hauteur, la largeur et le canal de l'image (par exemple, RVB).

Pour convertir le tableau NumPy dans une image PIL après avoir effectué les transformations souhaitées, le code suivant peut être utilisé :

new_pic = Image.fromarray(modified_pix)

Cependant, cette méthode ne permet pas de modifier directement l'image PIL d'origine à l'aide du tableau NumPy modifié .

Avant la version 1.1.6 de PIL, la modification de l'image PIL d'origine nécessitait la conversion du tableau NumPy en une liste de tuples :

data = list(tuple(pixel) for pixel in modified_pix)
pic.putdata(data)

Cependant, cette approche peut être lente et inefficace.

Dans PIL version 1.1.6 et supérieure, la méthode préférée pour la conversion entre les images PIL et les tableaux NumPy est :

pix = numpy.array(pic)

Cette commande produit un tableau NumPy en 3 dimensions avec des lignes, des colonnes , et les canaux RVB comme dimensions.

Après avoir effectué les transformations de pixels, le tableau mis à jour peut être reconverti en une image PIL en utilisant :

new_pic = Image.fromarray(modified_pix)

Alternativement, on peut modifier le PIL d'origine image en utilisant le tableau NumPy modifié avec :

pic.putdata(modified_pix)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn