Aller au contenu principal

Manipulation d'une image

Introduction

Objectif

Manipuler les pixels et les couleurs d'une image à l'aide du langage de programmation Python.

Travail à rendre

Un compte rendu est à transmettre en fin de séance :

  • Créer un document texte en utilisant un logiciel de traitement de texte (LibreOffice Writer, Word, ...)
  • Y intégrer les informations explicitement demandées dans chaque exercice
  • L'envoyer via Pronote en exportant au préalable le compte rendu au format PDF

Préparation

Afin de ne pas mélanger les productions entre les travaux pratiques, mettre à jour les dossiers SNT selon l'ordinateur utilisé :

💻 Ordinateur portable
  1. Lancer l'explorateur de fichiers
  2. Se rendre dans le dossier Mes documents
  3. Créer le dossier SNT s'il n'existe pas déjà (clic droit, Nouveau > Dossier)
  4. Dans le dossier SNT, créer le dossier Photographie
  5. Dans le dossier Photographie, créer le dossier TP1 - Manipulation d'une image
🖥 Ordinateur fixe des salles informatiques
  1. Depuis le bureau, cliquer sur l'icône intitulée Zone personnelle
  2. Créer le dossier SNT s'il n'existe pas déjà (clic droit, Nouveau > Dossier)
  3. Dans le dossier SNT, créer le dossier Photographie
  4. Dans le dossier Photographies, créer le dossier TP1 - Manipulation d'une image

Exercice 1 - Définition d'une image

Consigne de préparation

  1. Téléchargez le fichier smiley.png (et ne pas l'ouvrir)
  2. Lancez Basthon (👈 cliquez sur le lien afin de disposer automatiquement du code Python nécessaire à cet exercice)
  3. Dans Basthon, cliquez sur le bouton représentant un dossier et qui sert à importer un fichier
  4. Importez le fichier smiley.png téléchargé précédemment
    (le fichier doit s'appeler "smiley" ou "smiley.png" et non "smiley (1)" ou autre)
Code Python

À n'utiliser que si vous souhaitez utiliser un autre interpréteur Python que Basthon.

### --- Exercice 1 ---
from PIL import Image

# Lecture du fichier image
img = Image.open("smiley.png")

# Récupération et affichage de la définition
largeur, hauteur = img.size
print(largeur, "x", hauteur)

Consigne de travail

Une image numérique est composée de pixels. Le pixel est un point coloré qui constitue le plus petit élément d'une image. Une des caractéristiques d'une image numérique est sa définition. La définition d'une image correspond à sa dimension exprimée en pixels sous la forme largeur x hauteur.

  1. Cliquez sur le bouton Exécuter
  2. Lisez les dimensions de l'image
  3. Reportez dans votre compte rendu les informations suivantes en ne faisant qu'une seule phrase :
    • Largeur en pixels
    • Hauteur en pixels
    • Nombre total de pixels que contient l'image (à calculer)

Exercice 2 - Manipulation de pixels

Consigne de préparation

  1. Téléchargez le fichier smiley.png (c'est normalement déjà fait)
  2. Lancez de nouveau Basthon (👈 cliquez sur le lien afin de disposer automatiquement du code Python nécessaire à cet exercice)
  3. Dans Basthon, cliquez sur le bouton représentant un dossier et qui sert à importer un fichier
  4. Importez le fichier smiley.png téléchargé précédemment
  5. Cliquez sur le bouton Exécuter
  6. Cliquez sur le bouton représentant une image
Exercice 2
Code Python

À n'utiliser que si vous souhaitez utiliser un autre interpréteur Python que Basthon.

### --- Exercice 2 ---
from PIL import Image, ImageDraw

# Ouverture de l'image
img = Image.open("smiley.png")

# Coordonnées (x,y) de chaque oeil
oeil_gauche = (102, 20)
oeil_droit = (50, 49)

# Dessin du pixel de chaque oeil
draw = ImageDraw.Draw(img)
draw.point(oeil_gauche, fill='black')
draw.point(oeil_droit, fill='black')

# Afficher de l'image
img.show()

Consigne de travail

L'objectif de ce travail est de comprendre le système de coordonnées des pixels, c'est-à-dire où se trouve l'origine et comment sont orientés les axes X et Y:

  1. Repérez deux pixels noirs isolés sur l'image (ce sont les pixels représentant les yeux du smiley et ceux-ci sont mal placés)
  2. Modifiez les coordonnées des pixels afin de les placer correctement sur le smiley pour lui rendre ses yeux (faire plusieurs petits essais pour comprendre comment fonctionnent les coordonnées)
  3. Complétez votre compte rendu en ajoutant les informations suivantes :
    • Les nouvelles coordonnées des yeux
    • La position de l'origine sur l'image, c'est-à-dire où se trouve le point de coordonnées (0,0) (au centre de l'image ? en bas et au milieu ? en bas à gauche ? indiquez le bon endroit)

Exercice 3 - La couleur

Consigne de préparation

  1. Lancez de nouveau Basthon (👈 cliquez sur le lien afin de disposer automatiquement du code Python nécessaire à cet exercice)
  2. Cliquez sur le bouton Exécuter
  3. Cliquez sur le bouton représentant une image
Code Python

À n'utiliser que si vous souhaitez utiliser un autre interpréteur Python que Basthon.

### --- Exercice 3 ---
from PIL import Image

# Les 3 composantes d'une couleur
# La valeur de chaque composante
# est comprise entre 0 et 255
couleur = (0, 0, 0)

# Affichage de l'image
image = Image.new('RGB', (200, 200), couleur)
image.show()

Consigne de travail

En informatique, les couleurs peuvent être représentées en faisant varier l'intensité de trois composantes. Chaque intensité est codée sous forme d'une valeur entière comprise entre 0 et 255.

  1. Testez (255,0, 0), (0, 255, 0), (0, 0, 255) et reportez les couleurs trouvées dans votre compte rendu
  2. Complétez votre compte rendu en effectuant les tâches suivantes :
    • Trouvez et reportez le code couleur du blanc, du jaune et du magenta (rose/violet vif)
    • Recherchez sur le web le nombre de couleurs visibles par l'œil humain
    • Calculez le nombre total de couleurs possibles sachant que chacune des 3 intensités peut prendre 256 valeurs. Notez le calcul et la valeur trouvée dans le compte rendu
    • Comparez sur le nombre de couleurs qu'il est possible de générer avec le nombre de couleurs visibles par l'œil humain et conclure

Exercice 4 - Manipulation d'une image

Consigne de préparation

  1. Téléchargez le fichier fraise.jpg
  2. Lancez de nouveau Basthon (👈 cliquez sur le lien afin de disposer automatiquement du code Python nécessaire à cet exercice)
  3. Dans Basthon, cliquez sur le bouton représentant un dossier et qui sert à importer un fichier
  4. Importez le fichier fraise.jpg téléchargé précédemment
  5. Cliquez sur le bouton Exécuter
  6. Cliquez sur le bouton représentant une image
Code Python

À n'utiliser que si vous souhaitez utiliser un autre interpréteur Python que Basthon.

### --- Exercice 4 ---
from PIL import Image, ImageDraw

# Ouverture de l'image
img = Image.open("fraise.jpg")

# Parcours de tous les pixels de l'image
colonnes, lignes = img.size
for x in range(colonnes):
for y in range(lignes):
# Récupération de la couleur du pixel
position = (x, y)
r, v, b = img.getpixel(position)

# Manipulation de la couleur
couleur = (r, v, b)

# Modification du pixel
img.putpixel(position, couleur)

# Affichage de l'image
img.show()

Consigne de travail

L'ensemble des modifications demandées sont à effectuer uniquement au niveau de la ligne indiquée ci-dessous. Attention, veillez à conserver l'indentation des lignes (c'est-à-dire le même décalage vers la droite).

# Manipulation de la couleur
couleur = (r, v, b)

Les points de 1 à 7 sont simplement à expérimenter. Les résultats des points 8 et 9 sont à reporter dans le compte rendu.

  1. Modifiez les couleurs telles que : couleur = (b, r, v)
  2. Modifiez les couleurs telles que : couleur = (v, v, b)
  3. Supprimez la composante rouge : couleur = (0, v, b)
  4. Supprimez la composante verte : couleur = (r, 0, b)
  5. Supprimez la composante bleue : couleur = (r, v, 0)
  6. Créez la version négative : couleur = (255-r, 255-v, 255-b)
  7. Créez une image en noir et blanc en affectant aux 3 composantes le calcul de l'intensité moyenne :
    couleur = ((r+v+b)//3, (r+v+b)//3, (r+v+b)//3)
  8. Inventez votre propre "filtre" de couleurs et copier/coller votre "formule" et l'image générée dans votre compte rendu
  9. Testez un traitement sur l'image de votre choix (au format jpg ou png) et copiez/collez l'image obtenue dans votre comte rendu
Envoi du travail
  • Exportez votre compte rendu au format PDF
  • Connectez-vous à Pronote
  • L'envoyer en cliquant sur Déposer ma copie