Aller au contenu principal
Objectifs
  1. Comprendre le fonctionnement des images ;
  2. Manipuler les pixels des images ;
  3. Créer des algorithmes modifiant des images ;
  4. Découvrir les composantes rgb d'une image.

TP2 - Décomposition d'image

Au préalable

Sur EduPython :

  1. Créer un nouveau fichier en cliquant sur l'icône 📄, ou en appuyant sur CTRL+N
  2. Enregistrer le fichier sous le nom TP2_Photographie en cliquant sur l'icône 💾, ou en appuyant sur CTRL+S
Importer PIL

On utilise la ligne suivante :

from PIL import Image

Elle signifie que dans la bibliothèque PIL, on importe l'ensemble des fonctionnalités de Image.

L'ensemble des fonctionnalités à utiliser est à découvrir ici ⬇️

img = Image.open("nom_fichier.extension")
  • img est une variable qui sauvegarde l'image que l'on a chargé.
  • Image.open est la fonction de PIL permettant de charger l'image.
  • nom_fichier.extension doit être le nom de votre fichier AVEC son extension.

Exemple :

image1 = Image.open("photo.jpg")
image2 = Image.open("chat.png")

image1 charge la photo photo.jpg, tandis que image2 charge chat.png.

Décomposer les couleurs d'une image

On va chercher dans un premier temps à décomposer une image selon ses 3 couleurs primaires, c'est-à-dire créer :

  • Une image composée de la variation de rouge ;
  • Une image composée de la variation de vert ;
  • Une image composée de la variation de bleu ;
  1. Dans un premier temps, télécharger la photo suivante, et la mettre au même endroit que le fichier python.
  2. Importer la photo sur python à l'aide de l'instruction Image.open, et l'enregistrer dans une variable lac.
  3. Créer les variables hauteur et largeur à l'aide de l'instruction size.
Procédure

On souhaite avoir 3 images (rouge, vert et bleu) de la taille de lac, dans lesquelles chaque pixel aura pour valeur la valeur correspondant au rouge, vert et bleu des pixels de lac.
Si le pixel de coordonnées (10,10) de lac a pour valeur (147,31,276), alors à ce même point de coordonnées :

  • rouge aura pour valeur (147,0,0) ;
  • vert aura pour valeur (0,31,0) ;
  • bleu aura pour valeur (0,0,276).
  1. Créer les 3 images rouge, vert et bleu, de taille hauteur et largeur, dont la couleur de fond est blanche.
  2. À l'aide de boucles for, parcourir tous les pixels de lac (voir TP1).
  3. Dans la 2ème boucle for, récupérer dans une variable pixel la valeur des pixels (fonction getpixel).
Rappels

Pour rappel, la fonction getpixel donne un résultat sous la forme (rouge, vert, bleu).
Si on récupère le résultat dans une variable pixel, on peut accéder à la valeur rouge en utilisant :

pixel[0]
  1. Dans 3 variables pixel_rouge, pixel_vert, pixel_bleu, sauvegarder chacune des composantes de pixel.
  2. À la suite (et toujours dans la boucle) dans l'image rouge, changer la couleur du pixel par la valeur de pixel_rouge en composante rouge, et 0 pour la composante verte et bleue.
  3. Faire la même chose pour l'image vert et l'image bleu, avec les valeurs de pixel_vert et pixel_bleu en composante verte et bleue respectivement.
  4. À la fin du programme, afficher les images rouge, vert et bleu.

Recomposition d'image

Nous allons faire la même chose mais dans l'autre sens cette fois-ci. Nous allons partir de 3 images rouge, verte et bleue, pour recomposer l'image.

  1. Télécharger les 3 images rouge, vert, bleu, et les mettre au même endroit que le fichier python.
  2. Les ouvrir avec la fonction Image.open, et les sauvegarder chacune dans des variables rouge, vert et bleu.
  3. Créer les variables hauteur et largeur à l'aide de l'instruction size.
  4. Créer une image image de taille hauteur et largeur, remplie avec la couleur blanc.
  5. À l'aide de boucles for, parcourir la longueur et la largeur :
    #parcourt la largeur
    for ... in range(...) :
    #parcourt la hauteur
    for ... in range(...) :
    ...
  6. Récupérer la valeur des pixels de chaque image rouge, vert et bleu dans des variables pixel_rouge, pixel_vert et pixel_bleu.
  7. Changer les pixels de image par la valeur pixel_rouge, pixel_vert et pixel_bleu.
  8. Afficher image.