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
Modifier une image par convolution consiste à remplacer les composantes de chaque pixel par une combinaison des valeurs des composantes des pixels voisins et de lui-même.
Le code ci-dessous réalise cette transformation
Exécutez le
#on récupère les dimensions
largeur,hauteur=img.size
#création d'une image vide
img2=Image.new('RGB',(largeur,hauteur))
################ traitement ##############
# On récupère les valeurs des composantes
# du pixel et de ses 8 voisins
# On évite les bords de l'image
# On réalise le calcul
##########################################
for y in range(1,hauteur-1,1):
for x in range(1,largeur-1,1):
r1,v1,b1,a1=img.getpixel((x-1,y-1))
r2,v2,b2,a2=img.getpixel((x,y-1))
r3,v3,b3,a3=img.getpixel((x+1,y-1))
r4,v4,b4,a4=img.getpixel((x-1,y))
r5,v5,b5,a5=img.getpixel((x,y))
r6,v6,b6,a6=img.getpixel((x+1,y))
r7,v7,b7,a7=img.getpixel((x-1,y+1))
r8,v8,b8,a8=img.getpixel((x,y+1))
r9,v9,b9,a9=img.getpixel((x+1,y+1))
#modification des pixels
r=-r2-r4+5*r5-r6-r8
v=-v2-v4+5*v5-v6-v8
b=-b2-b4+5*b5-b6-b8
a=a5
img2.putpixel((x,y),(r,v,b,a))
# affichage des images
display(img,img2)
#Écrire le programme ici
On utilisera cette image
Il s'agit encore d'une transformation par convolution avec la matrice :
Exécutez ce code
pour pouvoir accéder à l'image hébergée par un serveur
Notez bien le nom de l'image !
#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/port.png"
response = requests.get(url)
imgp = Image.open(BytesIO(response.content))
#affichage de l'image
display(imgp)
Réalisez cette transformation
# Écrire le programme ici
Vous rajouterez au programme précédent ce bout de code là ou il faut en créant une seconde image vierge
# code à rajouter
moyenne=(r+v+b)//3
if moyenne>20:
c=0
else:
c=255
img3.putpixel((x,y),(c,c,c,a))
# Écrire le programme ici
# Écrire le programme ici