Pour faire ce TP on utilisera Spyder (Documentation Spyder). On utilisera PythonTutor pour tester les fonctions et observer la mémoire.
On téléchargera l’archive ressources_activite_6.zip et on l’extraira dans le
dossier de votre choix sur l’ordinateur (Extraire un fichier sous Windows 10).
Vous ouvrirez dans Spyder le fichier activite_6.py
contenu dans l’archive.
Les exercices de cette activité permettent de manipuler des images en niveau de gris, voilà quelques sorties des exercices :
Lire la section sur les matrices dans le cours .
Lire la section sur les modules dans le cours .
Une image en niveau de gris de dimension $l \times h$, où $l$ est la longueur de
l’image et $h$ la hauteur, est représentée par une matrice $h \times l$ à
valeurs entières entre $0$ (noir) et $255$ (blanc). La valeur à l’indice i,j
de la matrice correspond au niveau de gris du pixel de coordonnées (j,i)
.
\newpage Les coordonnées des pixels sont obtenus suivant le schéma ci-dessous :
Les images sont manipulées grâce à l’objet Image
du module PIL
et au module
numpy
, nommé np
dans les exemples ci-dessous. Voici quelques instructions
utiles pour manipuler les images.
Image.open("chemin/vers/image.jpg")
renvoie un objet
Image
contenant toutes les informations de l’image image.jpg
dont on a
précisé le chemin en argument.img.convert("L")
renvoie un
nouvel objet Image
contenant l’objet image img
convertie en niveau de gris.np.asarray(img).tolist()
renvoie une
matrice contenant les niveaux de gris de chaque pixel de l’image img
.Image.fromarray(np.array(matrice, dtype="uint8"),mode="L")
renvoie une image à partir d’une matrice de valeurs
entière entre 0
et 255
.img
contient un objet image, alorsimg
dans la console Spyder devrait afficher
l’image dans la console.display(img)
dans la console Spyder devrait
afficher l’image dans le panneau réservé à l’affichage graphique de Spyder.img.show()
dans la console Spyder devrait
afficher l’image dans le logiciel de visualisation d’image par défaut de
votre système.img.save("chemin/vers/image.jpg")
enregistre l’image img
dans le fichier image.jpg
.En début de fichier :
numpy
en le renommant np
.matplotlib.pyplot
en le renommant plt
Image
du module PIL
sans importer tout le module PIL
.from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
Implémentez une fonction image2matrice
qui prend en entrée un chemin vers une
image sous la forme de chaîne de caractère et qui renvoie la matrice associé à
l’image convertie en niveau de gris.
def image2matrice(img_chemin) :
"""
Entrées : img_chemin un chemin vers une image
Sortie : l'objet image associé
"""
image = Image.open(img_chemin).convert("L")
return np.asarray(image).tolist()
Implémentez une fonction symetrie_verticale
qui prend en entrée une matrice
représentant une image en niveau de gris et qui renvoie la matrice représentant
l’image obtenue en faisant une symétrie axiale par rapport à l’axe vertical
coupant l’image en son milieu.
En utilisant image2matrice
, symetrie_verticale
et Image.fromarray
,
affichez l’image obtenue en prenant la symétrie verticale de velociraptor.jpg
.
def symetrie_verticale(matrice) :
"""
Entrées : matrice d'une image en niveau de gris
Sortie : matrice de l'image en niveau de gros obtenue par symmétrie
axiale verticale
"""
M = []
for row in matrice :
L = list(reversed(row))
M.append(L)
return M
image_matrix = image2matrice("img/velociraptor.jpg")
image_matrix_sym = symetrie_verticale(image_matrix)
Image.fromarray(np.array(image_matrix_sym,dtype="uint8"))