Nom :
Nous travaillerons avec cette célèbre image
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 :
#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
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
#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
*Une image est donc constituée de pixels qui contiennent une couleur*
Imaginons une image de 10 X 10 pixels:
On peut la représenter par le tableau suivant :
Ainsi le pixel 65 a pour coordonnées : ( 5 , 6 )
Le code suivant donne les dimensions de notre image
Exécutez le
# on récupère les dimensions dans les variables largeur et hauteur
largeur,hauteur=img.size
#affichage du résultat
print(largeur," X ",hauteur," pixels")
Le code suivant affiche la couleur d'un pixel au hasard dans l'image
La bibliothèque random et la méthode randint ( random.randint( a , b) ) permet de choisir au hasard un nombre entier entre a et b
Exécutez le
import random
#on récupère les dimensions
largeur,hauteur=img.size
# choix d'un pixel et récupération de la couleur
x=random.randint(0,largeur)
y=random.randint(0,hauteur)
pixel=img.getpixel((x,y))
#affichage du résultat
print(" La couleur du pixel ",(x,y)," est ",pixel)
Comme on le constate avec le programme ci-dessus, la variable pixel contient 4 valeurs : ( rouge, vert , bleu , alpha)
Pour atteindre un élément de pixel :
On peut récupérer ces valeurs dans des variables avec le code suivant :
Exécutez le
import random
#on récupère les dimensions
largeur,hauteur=img.size
# choix d'un pixel et récupération de la couleur
x=random.randint(0,largeur)
y=random.randint(0,hauteur)
pixel=img.getpixel((x,y))
# mise des valeurs des composantes dans des variables
rouge=pixel[0]
vert=pixel[1]
bleu=pixel[2]
alpha=pixel[3]
#affichage du résultat
print("La composante rouge du pixel de coordonnées " ,(x,y), " est:",rouge)
print("La composante verte du pixel de coordonnées " ,(x,y), " est:",vert)
print("La composante bleue du pixel de coordonnées " ,(x,y), " est:",bleu)
print("La composante alpha du pixel de coordonnées " ,(x,y), " est:",alpha)
une image vierge avec les pixels modifiés de notre image.
La modification effectuée ici est de remplacer toutes les composantes rouges par le maximum soit : 255
#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)
# Écrire le programme ici
# Écrire le programme ici
Réalisez ci-dessous un programme qui réalise la transformation des pixels ( r , v, b, a) en : ( 255 - r, 255 - v , 255 - b , a)
# Écrire le programme ici
Quel nom peut-on donner à cette transformation ?
Réponse :
# Écrire le programme ici