Prérequis: TP images numeriques (partie1)
Chaque programme sera construit de la manière suivante:
- import de la librairie PIL
- ouvrir l’image source avec
Image.open
- relever hauteur et largeur de l’image source
- créer une nouvelle image vide avec
Image.new("RGB",(nouvelle_hauteur, nouvelle_largeur))
- Créer un nouveau tableau de pixels à partir de l’image source
- Avec une boucle, pour chaque pixel, lire les pixels de l’image source:
p=imageSource.getpixel((x,y))
- modifier la couleur
p
à l’aide d’un filtre - Coller ces pixels dans la nouvelle image, selon la transformation voulue:
image_nouvelle.putpixel((x,y),p)
### copie d'une image ##########
from PIL import Image
imageSource=Image.open("image_d_origine.jpeg")
largeur,hauteur=imageSource.size
imageCopie=Image.new("RGB",(largeur,hauteur))
for y in range(hauteur):
for x in range(largeur):
p=imageSource.getpixel((x,y))
# p est un tuple (p[0],p[1],p[2])
# modification selective des valeurs de p
imageCopie.putpixel((x,y),p)
imageCopie.save("image_copie.jpeg")
imageCopie.show()
Filtres appliqués à une image
Quand on applique un filtre vert à une image numérique, on parcourt l’image entière en recopiant pour chaque pixel sa composante verte, et en mettant le rouge et le bleu à 0.
Fonction filtreCouleur
Vous allez utiliser un IDE python (Spyder ou Pyzo) pour les exercices suivants.
Adopter tout de suite les BONNES PRATIQUES:
- pour chaque exercice, vous allez créer un NOUVEAU fichier python. Donnez lui un nom explicite, par exemple
naruto.py
pour le premier exercice- mettre tous les fichiers python et les images téléchargées ou générées par l’un des scripts python dans un même dossier, que vous nommerez
images_numeriques
ENONCE de l’exercice 1:
Créer une fonction filtreCouleur
qui prend en argument un objet de type Image et un tuple (r, g, b) , où r, g, et b sont des booléens, et qui renvoie une nouvelle image pour lesquelles les couleurs RGB sont conservées si le booléen
correspondant est True . Par exemple, l’image de Naruto verte ci-dessus est obtenue par le code :
naruto = Image.open("Naruto.png")
narutoGreen = filtreCouleur(naruto, (False, True, False))
narutoGreen.show()
Télécharger l’image d’origine:
Aide: Soit R
un booléen. Alors int(R)
vaut 1
si R
vaut True
, et 0
si R
vaut False
.
Soient R, V, B trois variables de type bool
, valant True
ou False
.
On peut appliquer le filtre sur la couleur p
du pixel en faisant:
p = (p[0]*int(R),p[1]*int(V),p[2]*int(B))
Correction: (à venir)
Créer ainsi des images NarutoRouge.png , NarutoBleu.png , NarutoJaune.png , NarutoMagenta.png et NarutoCyan.png
Assembler les personnages
ENONCE de l’exercice 2:
Créer maintenant un ruban d’images, comme sur l’image suivante:
Correction: (à venir)
Incrustation d’image sur fond vert
L’incrustation d’image sur un nouveau décors est largement utilisé dans le cinéma.
L’algorithme qui fabrique la nouvelle image parcourt les pixels de l’image d’origine (celle avec le fond vert). A partir d’un certain seuil, si la couleur du pixel est franchement verte, c’est le pixel du decors qui placé dans la nouvelle image.
ENONCE de l’exercice 3:
Utilisez les 2 images suivantes pour en créer une nouvelle, artificielle, en incrustant la première image dans la seconde.
Liens
- effets speciaux: tpeeffetsspeciauxnumeriques.wordpress.com