Traitement de l'image TP n° 2


Écrire votre nom ici

Nom :


Commençons par faire afficher notre image

Nous travaillerons avec cette célèbre image

<p style="text-align:left";> </p> Pour utiliser/manipuler des images en Python, il faut utiliser une bibliothèque.

Nous utiliserons la bibliothèque: pillow

Si elle n'est pas déjà installée :

In [0]:
#pip install pillow

Pour ceux qui utilise la version(jupyter) de EduPython:

Exécutez cette cellule au préalable afin d'importer le module display pour l'affichage dans le notebook

In [0]:
from IPython.display import display

Le code suivant affiche l'image

L'image est hébergée sur un serveur et est chargée dans ce notebook

Exécutez le

In [0]:
#chargement des bibliothèques 
from PIL import Image
import requests
from io import BytesIO
# chargement de la photo se trouvant à l'adresse donnée
url=" http://isn-icn-ljm.pagesperso-orange.fr/photo/joconde.png"
response = requests.get(url)
img = Image.open(BytesIO(response.content))
#affichage de l'image
display(img)

Dans tout ce TP la variable img contient l'image téléchargée depuis le serveur

Mettre une image en niveau de gris

Pour mettre une image en niveau de gris, il faut remplacer les composantes rouge, verte et bleue par leur moyenne

Donc pour chaque pixel on réalise la transformation suivante:

moyenne = ( r+v+b )//3 ( la moyenne doit être un entier )

( r , v , b , a) -----> (moyenne , moyenne , moyenne , a)

Complétez le code ci-dessous pour qu'il réalise une mise en niveau de gris

In [0]:
#on récupère les dimensions
largeur,hauteur=img.size
#création d'une image vide de mêmes dimensions
img2=Image.new('RGB',(largeur,hauteur))

# On parcourt l'image avec une double boucle
for x in range(largeur):
    for y in range(hauteur):
        pixel=img.getpixel((x,y))
        #chargement des composantes dans des variables
        rouge=pixel[0]
        vert=pixel[1]
        bleu=pixel[2]
        alpha=pixel[3]
        # calcul de la moyenne à compléter
       
        # remplissage de la nouvelle image à modifier
        img2.putpixel((x,y),(???,???,???,alpha))
#affichage des deux images
display(img,img2)

Mettre une image en noir et blanc

Pour mettre une image en noir et blanc, il faut au préalable l'avoir mise en niveau de gris,

puis si la moyenne calculée est supérieure à 127 on la met au maximum (255) sinon on la met au minimum (0)

Voici un bout de code qu'il faudra utiliser :

In [0]:
if moyenne > 127:
    moyenne=255
else:
    moyenne=0

À faire:

Réalisez ci-dessous un programme qui réalise la mise en noir et blanc de l'image

In [0]:
#Écrire le programme ici
 

À faire:

Dans le programme précédent 127 est un 'seuil'

Reprendre le programme précédent en modifiant ce seuil

In [0]:
#Écrire le programme ici
 

Filtrage par seuil

Voici le programme du filtre rouge du TP n°1

In [0]:
#on récupère les dimensions
largeur,hauteur=img.size
#création d'une image vide de mêmes dimensions
img2=Image.new('RGB',(largeur,hauteur))

# On parcourt l'image avec une double boucle
for x in range(largeur):
    for y in range(hauteur):
        pixel=img.getpixel((x,y))
        #chargement des composantes dans des variables
        rouge=pixel[0]
        vert=pixel[1]
        bleu=pixel[2]
        alpha=pixel[3]
        # remplissage de la nouvelle image
        img2.putpixel((x,y),(255,vert,bleu,alpha))
#affichage des deux images
display(img,img2)

À faire:

Modifiez le programme pour que la composante rouge de la nouvelle image soit de 255 si la composante rouge de l'image est supérieure à 127 et 0 sinon

In [0]:
#Écrire le programme ici
 

À faire:

Imaginez un programme qui réalise un filtrage par seuil différent sur les 3 composantes...

In [0]:
#Écrire le programme ici