Maison >développement back-end >Tutoriel Python >Comment convertir efficacement les images PIL en tableaux NumPy pour la manipulation des pixels et inversement ?

Comment convertir efficacement les images PIL en tableaux NumPy pour la manipulation des pixels et inversement ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 14:18:03706parcourir

How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Manipulation and Back?

Conversion d'images PIL en tableaux NumPy pour une manipulation efficace des pixels

Question : Comment pouvez-vous convertir une image PIL en tableau NumPy pour des pixels plus rapides transformations intelligentes sans rencontrer de problèmes lors de la reconversion vers un PIL Image ?

Réponse :

Le processus comporte deux étapes :

Conversion de l'image PIL en tableau NumPy

Pour convertir un PIL Image dans un tableau NumPy, vous pouvez utiliser ce code comme exemple :

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

Conversion du tableau NumPy en image PIL

Utilisation de pic.putdata() :

Si pic.putdata() est ne se comporte pas comme prévu lorsque vous tentez de charger le tableau modifié dans l'image PIL, vérifiez que vous fournissez les données dans un format accepté par putdata(). Il attend une séquence de tuples, vous devrez donc peut-être convertir le tableau dans ce format, comme indiqué ci-dessous :

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

Utilisation de PIL 1.1.6 :

Depuis PIL 1.1.6, vous pouvez utiliser l'approche simplifiée suivante pour la conversion entre les images et NumPy tableaux :

pix = numpy.array(pic)

Cela donnera lieu à un tableau tridimensionnel avec des lignes, des colonnes et des valeurs RVB.

Étapes finales :

Après avoir apporté des modifications au tableau, vous pouvez utiliser pic.putdata(pix) ou Image.fromarray(pix) pour créer un nouveau PIL. Image.

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