Traitement d'Image
Nous allons voir comment modifier les pixels des photos pour obtenir différents effets.
Mise en évidence d'une couleur, transformation en noir et blanc, détection de contour ...
Cela vous permettra de voir ce qu'on peut faire avec un langage de programmation comme Python.
1 - Boucle For
Modifiez un pixel c'est déjà bien, mais comment faire pour modifier plusieurs pixels ?
La réponse est simple, nous allons utiliser des boucles FOR.
La structure de la boucle for est la suivante :
for i in range(a, b)): instruction1 instruction2 suite programme
Nous avons ici une boucle où la variable i prendra toutes les valeurs entières comprises entre a et b (a inclus et b exclu).
Pour faire les exercices ci-dessous,
Vous allez ouvrir un notebook Jutyter (Python) en cliquants sur le lien ci-contre :
NoteBook
Simples boucles
01°
- Copier/coller le code ci-dessous, puis le tester
- Modifier ce code pour obtenir les résultats suivants (Ne pas faire les questions c), d) et e)):
print(0, i)
02° Un exemple avec des images
- Copier/coller et tester le code ci-dessous :
- Créer les images suivantes en 32 par 32 :
- Simples Boucles images
from PIL import Image
#Creation d'une image blanche RGB 32x32
Figure1 = Image.new("RGB",(32,32),(255,255,255))
# definition d'une couleur
rouge = (255, 0, 0)
#remplissage de l'image avec une boucle:
for i in range(0,32):
Figure1.putpixel((0, i), rouge)
#Affichage de l'image
plt.imshow(Figure1)
plt.show()
Doubles boucles
On va utiliser deux boucles FOR imbriquées.
03° Exemples - Dessiner des rectangles
- Copier/coller et tester le code ci-dessous :
import matplotlib.pyplot as plt
from PIL import Image
#Creation d'une image blanche RGB 30x20
Figure1 = Image.new("RGB",(30,20),(255,255,255))
# definition des couleurs:
bleu = (0, 0, 255)
jaune = (255, 255, 0)
#remplissage de l'image avec une double boucle:
for x in range(0,10):
for y in range(0,20):
Figure1.putpixel((x, y), bleu)
#remplissage de l'image avec une double boucle:
for x in range(10,30):
for y in range(12,20):
Figure1.putpixel((x, y), jaune)
#Affichage de l'image
plt.imshow(Figure1)
plt.show()
- À la ligne 20, après : Figure1.putpixel((x, y), jaune)
Lara rajoute dans ce programme une autre double boucle :
#remplissage de l'image avec une double boucle:
for x in range(10,30):
for y in range(3,10):
Figure1.putpixel((x, y),(255,0,0))
Exécuter le programme ainsi modifié
04° Le drapeau Français
Copier/coller et compléter le code suivant pour obtenir le drapeau de la France :
from PIL import Image
#Creation d'une image blanche RGB 90x60
Figure1 = Image.new("RGB",(30,20),(255,255,255))
# definition des couleurs:
bleu = (0, 0, 255)
rouge = (255, 0, 0)
#remplissage de l'image avec une double boucle:
for x in range(0,10):
for y in range(0,20):
Figure1.putpixel((x, y), bleu)
#remplissage de l'image avec une double boucle:
for x in range(..., ...):
for y in range(..., ...):
Figure1.putpixel((x, y), rouge)
#Affichage de l'image
plt.imshow(Figure1)
plt.show()
05° Un autre drapeau
- Réaliser le drapeau de l'Allemagne
- Drapeau Allemagne
- 90 par 60 pixels
2 - Première Etude
Pour les exercices qui suivent, vous devez utiliser le logiciel Spyder.
Nous allons maintenant manipuler des images et changer les valeurs RGB des différents pixels.
Dans un premier temps nous allons utiliser une simple photo de Yoda pour faire nos premiers essais, ensuite, vous pourrez travailler avec l'image de votre choix.
L'image de Yoda est téléchargeable ici.
Cette image devra se trouver dans le même dossier que vos programmes Python.
06°
- Lancer le logiciel "Spyder"
- Créer un nouveau fichier et copier/coller le code ci-dessous :
- Exécuter ce code et observer l'image affichée.
- Lire l'analyse du programme ci-dessous
- A partir du programme précédent, éxécuter les taches suivantes :
- a) Quelle est la taille de l’image chargée?
- b) Quelle est la couleur du pixel de coordonnées (90 ; 150) ?.
- c) Modifier l’image pour que le pixel de coordonnées (120;70) soit bleu.
Pensez à utiliser la commande :
MonImage.putpixel((...,...),(...,...,...))
- d) Mettre un pixel de couleur rouge au bout de du sabre laser.
# Création de l'objet-image propre à Python
MonImage = Image.open("tux_yoda.jpg")
r, v, b = MonImage.getpixel((90, 150))
print(MonImage.size)
print("canal rouge : ", r, "canal vert : ", v, "canal bleu : ", b )
MonImage.show()
Voici une analyse ligne par ligne du programme ci-dessus :
- "from PIL import Image" : pour travailler sur les images nous avons besoin d'une extension de Python (appelé bibliothèque). Cette bibliothèque se nomme PIL.
-
"MonImage = Image.open("tux_yoda.jpg")" c'est grâce à cette ligne que nous précisons que nous allons travailler avec l'image "tux_yoda.jpg".
Pour travailler avec une autre image, il suffit de remplacer "tux_yoda.jpg" par un autre nom.
(attention, votre fichier image devra se trouver dans le même dossier que le ficher de votre programme Python). -
"r,v,b=MonImage.getpixel((90,150))" cette ligne récupère les valeurs du canal rouge (r), du canal vert (v) et du canal bleu (b) du pixel de coordonnées (90,150).
Dans la suite du programme, r correspondra à la valeur du canal rouge, v correspondra à la valeur du canal vert et b correspondra à la valeur du canal bleu. -
"print(MonImage.size)" permet d'imprimer les dimension de l'image.
Ces dimensions sont obtenues par la commande "MonImage.size" - "print("canal rouge : ",r,"canal vert : ",v,"canal bleu : ",b)" permet d'imprimer le résultat
Activité publiée le 25 11 2020
Dernière modification : 18 3 2024
Auteur : Andjekel.