1. Mise en place
- créer un dossier TP3_images,
- télécharger et enregistrer les images suivantes dans ce dossier
- ouvrir Thonny et copier-coller le code ci-dessous
from PIL import Image # on importe la classe Image et ses méthodes de la
# bibliothèque Pillow alias PIL
image = Image.open("Mona_lisa.jpg") # Chargement d'une image avec PIL
# image est déclarée comme un objet de la classe Image de PIL
def taille(img):
return img.size # méthode propre à la classe Image
def format(img):
return img.format # méthode propre à la classe Image
def lire_pixel(img,x,y):
return img.getpixel((x,y)) # méthode propre à la classe Image
def changer_pixel(img,x,y,couleur):
image=img
image.putpixel((x,y),couleur) # méthode propre à la classe Image
return image
def afficher(img):
img.show()
# premieres fonctions de traitement de l'image
def filtre1(img,e):
image_retour=img.copy()
(l, h) = taille(image)
for y in range(h):
for x in range(l):
c = lire_pixel(image_retour,x,y)
rouge=c[0]
vert=c[1]
bleu=c[2]
nouvelle_c=(rouge+e,vert+e,bleu+e)
image_retour=changer_pixel(image_retour,x,y,nouvelle_c)
afficher(image_retour)
return image_retour
def canal_R(img):
image_retour=img.copy()
(l, h) = taille(image)
for y in range(h):
for x in range(l):
c = lire_pixel(image_retour,x,y)
rouge=c[0]
vert=c[1]
bleu=c[2]
nouvelle_c=(rouge,0,0)
image_retour=changer_pixel(image_retour,x,y,nouvelle_c)
afficher(image_retour)
return image_retour
def enregistrer(img,nom):
img.save(nom+".jpg")
img.save(nom+".png")
- enregistrer votre fichier avec le nom TP3 dans votre dossier,
- exécuter votre programme.
Exercice 1
Tester les commandes :
>>>image1=filtre1(image,10)
>>>image2=filtre1(image,-10)
Que remarquez-vous ? Tester la fonction filtre1 avec d’autres valeurs pour le 2° paramètres.
Exercice 2
Tester la commande :
>>>imageR=canal_R(image)
Enregistrer l’image obtenue avec la commande :
>>>enregistrer(imageR,"Mona_Lisa_R")
- En vous inspirant de la fonction canal_R(), écrire une fonction canal_V() et une fonction canal_B() permettant d’extraire respectivement le canal vert et le canal bleu d’une image,
- enregistrer aux noms « Mona_Lisa_V » et « Mona_Lisa_B » vos deux images obtenues à l’aide de ses fonctions.
- Tester vos 3 fonctions avec l’image Mondrian.
Exercice 3
Pour convertir une image couleur RVB en noir et blanc, il suffit de remplacer les valeurs des 3 canaux R,V et B par leur moyenne.
En vous inspirant des fonctions précédentes, créer une fonction noir_blanc() qui permet de convertir une image couleur en noir et blanc ou plus exactement en dégradé de gris.
Exercice 4
Ajouter à votre programme les fonctions suivantes.
def symetrie(img):
image_retour=img.copy()
(l, h) = taille(image)
for y in range(h):
for x in range(l):
c = lire_pixel(image,x,y)
image_retour=changer_pixel(image_retour,l-1-x,y,c)
afficher(image_retour)
return image_retour
def symetrie_1(img):
image_retour=img.copy()
(l, h) = taille(image)
for y in range(h):
for x in range(l):
c = lire_pixel(image_retour,x,y)
image_retour=changer_pixel(image_retour,l-1-x,y,c)
afficher(image_retour)
return image_retour
def symetrie_2(img):
image_retour=img.copy()
(l, h) = taille(image)
for y in range(h):
for x in range(l):
c = lire_pixel(image_retour,l-1-x,y)
image_retour=changer_pixel(image_retour,x,y,c)
afficher(image_retour)
return image_retour
def photomaton(img):
'''
ne fonctionne qu'avec une image de dimensions paires
'''
image_retour=img.copy()
(l, h) = taille(image)
l1=int(l/2)
h1=int(h/2)
for x in range(0,l-1,2):
for y in range(0,h-1,2):
pixel1 = lire_pixel(img,x,y)
pixel2 = lire_pixel(img,x+1,y)
pixel3 = lire_pixel(img,x,y+1)
pixel4 = lire_pixel(img,x+1,y+1)
x1=int(x/2)
y1=int(y/2)
image_retour=changer_pixel(image_retour,x1,y1,pixel1)
image_retour=changer_pixel(image_retour,x1+l1,y1,pixel2)
image_retour=changer_pixel(image_retour,x1,y1+h1,pixel3)
image_retour=changer_pixel(image_retour,x1+l1,y1+h1,pixel4)
afficher(image_retour)
return image_retour
def boucle_photomaton(img,n):
image_retour=img.copy()
for i in range(n):
image_retour=photomaton(image_retour)
return image_retour
– Après exécution, tester les commandes symetrie(image), symetrie_1(image) et symetrie_2(image).
– tester les commandes photomaton(image) et boucle_photomaton(image,8),
– modifier le programme pour qu’il télécharge en image l’image de Mona Lisa réduite. Tester à nouveau les commandes photomaton(image) et boucle_photomaton(image,8),
Pour en savoir plus :
https://images.math.cnrs.fr/Le-traitement-numerique-des-images.html