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
Il s'agit de déplacer les pixels de l'image afin d'obtenir une image modifiée par symétrie
Le code suivant réalise une symétrie qui renverse l'image de la Joconde
Le principe est :
#on récupère les dimensions de l'image
largeur,hauteur=img.size
#création d'une image vide
img2=Image.new('RGB',(largeur,hauteur))
#traitement
for y in range(0,hauteur//2,1):
for x in range(0,largeur,1):
pixel1=img.getpixel((x,y))
pixel2=img.getpixel((x,319-y))
img2.putpixel((x,y),pixel2)
img2.putpixel((x,319-y),pixel1)
display(img2)
# Écrire le programme ici
# Écrire le programme ici
On souhaite écrire un programme qui effectue la transformation suivante:
Le principe du photomaton :
Il faut redistribuer les pixels comme le montre le schéma suivant:
Voici le code qui réalise cette transformation:
#on récupère les dimensions
largeur,hauteur=img.size
print(largeur,hauteur)
#Calcul des nouvelles coordonnées
def coord(x,y):
if x%2==0 and y%2==0:#pair,pair
return (x//2,y//2)
if x%2==0 and y%2!=0:#pair,impair
return (x//2+largeur//2,y//2+1)
if x%2!=0 and y%2==0:#impair,pair
return (x//2+1,y//2+hauteur//2)
if x%2!=0 and y%2!=0:#impair,impair
return (x//2+largeur//2,y//2+hauteur//2)
#traitement
def photomaton(image):
#création d'une image vide
im=Image.new('RGB',(largeur,hauteur))
for y in range(0,hauteur,1):
for x in range(0,largeur,1):
var=coord(x,y)#appel de la fonction coord()
pixel=image.getpixel((x,y))
im.putpixel(var,pixel)
return im
var = photomaton(img) #appel de la fonction photomaton()
display(var)
408 320
# Écrire le programme modifié ici