Maison  >  Article  >  développement back-end  >  Comment convertir une image PIL en un tableau NumPy et inversement ?

Comment convertir une image PIL en un tableau NumPy et inversement ?

DDD
DDDoriginal
2024-11-23 07:33:08380parcourir

How to Convert a PIL Image to a NumPy Array and Back?

Conversion d'une image PIL en tableau NumPy

Problème :

Comment pouvez-vous convertir une image PIL en tableau NumPy pour effectuez des transformations plus rapides au niveau des pixels, puis chargez-le à nouveau dans l'image PIL après avoir modifié le tableau ?

Réponse :

Conversion en tableau NumPy :

Pour convertir une image PIL en tableau NumPy, utilisez le code suivant :

import numpy as np
from PIL import Image

pic = Image.open("foo.jpg")
pix = np.array(pic)

Cela créera un tableau 3D de forme (hauteur, largeur, canaux) contenant des valeurs de pixels.

Conversion vers l'image PIL :

Pour charger à nouveau le tableau modifié dans l'image PIL, il existe plusieurs façons :

1. Utilisation d'Image.putdata() :

Convertissez le tableau en une séquence de tuples :

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

2. Utilisation d'Image.fromarray() (PIL 1.1.6 ou supérieur) :

Attribuez simplement le tableau modifié à l'image :

pic = Image.fromarray(pix)

Remarques supplémentaires :

  • La méthode getdata() de l'image PIL renvoie un tableau aplati, vous devez donc remodeler pour obtenir un tableau 3D.
  • Le tableau NumPy de np.array(pic) a l'axe des canaux comme dernière dimension, tandis que la méthode getdata() suppose l'axe des canaux comme première dimension.
  • La méthode Image.fromarray() permet une conversion plus rapide, notamment pour les grandes images.

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