La Joconde - Retouche de couleurs
Importer l'image
Chargeons l'image sur laquelle nous allons travailler dans cette première partie. Suivez la procédure suivante
Téléchargez le fichier ci-dessous
décompressez-le
allez dans le menu sketch/Ajouter un fichier...
sélectionnez le fichier monalisa_256.jpg afin de le accessible visible par notre programme python.
Recopiez et exécutez le programme ci-dessous, qui va se charger d'afficher la joconde.
def setup():
size(256,256)
monImage = loadImage("monalisa_256.jpg")
image(monImage,0,0)
def draw():
pass
Complément : Quelques explications
Le programme ci-dessus est assez simple. Une fois le fichier monalisa_256.jpg chargé dans le sketch, nous utilisons
la fonction loadImage() pour charger l'image en mémoire dans une variable monImage
la fonction image() pour afficher l'image contenue dans la variable monImage. Celle-ci sera affichée à partir du point de coordonnées (0,0).
Méthode : Récupérer un pixel d'une image
Nous avons vu précédemment comment modifier la couleur d'un pixel dont la position était connue à l'aide de la fonction set(). A présent, nous allons récupérer les informations concernant un pixel d'une image à l'aide de la fonction get(). Cette-ci prend en paramètres les coordonnées du pixel dont on veut récupérer la couleur.
Exemple :
Recopiez et analysez ce programme.
def setup():
global monImage
size(256,256)
monImage = loadImage("monalisa_256.jpg")
image(monImage,0,0)
def draw():
if mouseX!= pmouseX or mouseY != pmouseY:
image(monImage,0,0) # on réaffiche l'image car la souris a bougé
couleur=get(mouseX,mouseY)
fill(couleur)
rect(mouseX-25,mouseY-25,50,50)
monImage=0
Complément : Quelques explications
Dans cet exemple, nous devons accéder à la variable monImage, à la fois dans la fonction setup() pour l'affichage initial, et aussi dans la fonction draw() pour le rétablissement de l'image d'origine à chaque déplacement de la souris. Pour accéder à la variable monImage dans ces deux fonctions, on passe ici par une variable globale. Celle-ci étant modifiée dans la fonction setup(), on ajoute en début de celle-ci la ligne global monImage.
Pour détecter que la souris a bougé depuis l'appel précédent de draw(), on utilise le test suivant : if mouseX!= pmouseX or mouseY != pmouseY, qui compare la position de la souris avec sa position précédente. La souris a bougé si l'une ou l'autre de ses coordonnées a changé.
La fonction get(mouseX,mouseY) renvoie la couleur du pixel sous le curseur de souris. Il nous reste ensuite qu'à afficher un carré rempli avec cette couleur.
Modification des pixels
Commençons à torturer notre joconde. Recopiez, analysez et exécutez le programme ci-dessous :
def setup():
global monImage
size(256,256)
monImage = loadImage("monalisa_256.jpg")
image(monImage,0,0)
def draw():
pass
def mousePressed():
for y in range(256):
for x in range(256):
couleur = get(x,y)
R,V,B=red(couleur), green(couleur), blue(couleur)
couleur=color(R,B,V)
set(x,y,couleur)
monImage=0
Complément : Quelques explications
A chaque clic de souris, nous récupérons la valeur de chaque pixel dans deux boucles imbriquées afin de modifier la couleur.
couleur = get(x,y) récupère la couleur
R,V,B=red(couleur), green(couleur), blue(couleur) convertit cette couleur en valeurs des canaux rouges, verts et bleus
couleur=color(R,B,V) inverse les canaux verts et bleus du pixel ce qui occasionne le changement global de couleur de l'image
Exercice Im5 : Changement d'éclairage
Dans cet exercice, vous allez modifier la luminosité de l'image de la manière suivante :
si on appuie sur la touche c, l'image deviendra 50% plus claire
si on appuie sur la touche f, l'image deviendra 34% plus foncée
si on appuie sur la touche r, les couleurs deviendront plus rouges.
si on appuie sur la touche espace, l'image de départ sera rechargée.
Exemple : après 2 appuis sur la touche f, l'image ressemblera à ceci.
Indications :
Pour que l'image devienne 50% plus claire, on multipliera chaque couleur R, V et B par 1,5.
Pour que l'image devienne 34% plus foncée, on multipliera chacune des couleurs R,V et B par 0,66.
Pour que les couleurs deviennent plus rouges, on multipliera uniquement le canal rouge par 1,2
Exercice Im6 : en noir et blanc
Dans cet exercice, vous allez transformer l'image de la joconde en noir et blanc. Pour cela, il y a plusieurs moyens de procéder
en recopiant les valeurs d'un canal sur les autres. Par exemple, si un pixel possède les couleurs (R,V,B), on le transforme en (R,R,R) si on ne garde que le canal rouge, (V,V,V) si on garde que le vert et (B,B,B) si on ne garde que le bleu.
en se basant sur la valeur moyenne des canaux. Par exemple, si un pixel possède les couleurs (R,V,B), on le transforme en (M,M,M) où \(M=\dfrac{R+V+B}{3}\)
Dans cet exercice, votre travail consistera à tester ces différents types de noir et blanc sur la joconde. Votre programme fonctionnera de la manière suivante :
Si vous appuyez sur la touche r, votre image sera passée en noir et blanc en ne conservant que le canal rouge.
Si vous appuyez sur la touche v, votre image sera passée en noir et blanc en ne conservant que le canal vert.
Si vous appuyez sur la touche b, votre image sera passée en noir et blanc en ne conservant que le canal bleu.
Si vous appuyez sur la touche m, votre image sera passée en noir et blanc en utilisant la valeur moyenne des couleurs.
Lorsque vous relâchez la touche (r,v,b pou m), l'image sera restaurée en couleurs d'origine.
Remarque :
Vous voyez ainsi qu'il n'y a pas qu'une seule manière d'obtenir des noirs et blancs. En fonction de ce que l'on veut faire ressortir sur une image (végétation, ciel, visages, etc...), on utilisera une méthode plutôt qu'une autre.