DUT Info Structures de donn´ees et algorithmes fondamentaux 2019–2020 TP 4 - Manipulation d’images
L’objectif de ce TP est de r´ealiser un programme permettant de visualiser certaines transfor- mations basiques sur des images. Le programme `a compl´eter (images_init.py) vous permet de charger des images, et de visualiser ce qui se passe avant et apr`es la transformation. Vous pou- vez tester vos fonctions sur le fichier python-logo.gif, utilis´e dans les illustrations ci-dessous.
Le programme applique les transformations les unes `a la suite des autres sur le r´esultat ; vous pouvez utiliser le bouton “R´einitialiser” pour recharger l’image de d´epart, au lieu de la charger
`
a nouveau via l’interface.
Remarques :
— Il est important que vos fonctions ne renvoient rien, car c’est de cette mani`ere que l’interface du programme d´etecte que la fonction a ´et´e compl´et´ee.
— Vous pouvez bien entendu charger des images de votre choix, mais : 1. tkinter ne permet de lire que les formats gifetpnm;
2. l’affichage des modifications ´etant plutˆot lent, il est conseill´e de s’en tenir `a des images de taille “raisonnable” ;
3. la transparence n’est pas bien g´er´ee par tkinter, si bien que des zones initialement transparentes peuvent devenir noires.
— Vous serez amen´es `a modifier directement les matrices pass´ees en param`etres `a vos fonc- tions. Si `a un moment donn´e, il vous est n´ecessaire de r´einitialiser le contenu de la matrice M qui vous est donn´ee, vous pouvez le faire `a l’aide de l’instruction M[:] = [] comme vu au cours.
— Il est interdit d’utiliser des m´ethodes de Python r´ealisant les tˆaches demand´ees, comme reverse,reversedou zip.
— Vous serez ´egalement ´evalu´es sur l’efficacit´e de vos fonctions.
— Il est recommand´e de tester les fonctions sur des petits exemples `a part, car certains probl`emes ne se voient pas sur des images.
Les manipulations `a effectuer sur les images se ram`enent en fait `a des transformations `a effectuer sur des matrices de pixels. Dans le cas de Python et du module tkinter qui nous permet de manipuler ces images, les pixels sont repr´esent´es par des tuples d’entiers entre 0 et 255 (par exemple : (0, 128, 255)).
1. Compl´etez la fonctioninverser_couleurs(M)pour qu’elle inverse les couleurs de chaque pixel de la matrice. Par “inverser”, on veut dire remplacer chaque valeur du pixel par son compl´ement (exemple : 135 devient 255−135 = 120). On aura donc le r´esultat suivant :
Page 1 / 4
DUT Info Structures de donn´ees et algorithmes fondamentaux 2019–2020 2. Compl´etez la fonction renverser_horizontalement(M)pour qu’elle modifie la matrice de pixels de mani`ere `a renverser l’image correspondante horizontalement, comme illustr´e ci-dessous :
3. Compl´etez la fonction renverser_verticalement(M) pour qu’elle modifie la matrice de pixels de mani`ere `a renverser l’image correspondante verticalement, comme illustr´e ci-dessous :
4. Compl´etez la fonctiontransposer(M)pour qu’elle transpose la matrice donn´ee, comme illustr´e ci-dessous. Veillez `a modifier la matrice en place si elle est carr´ee.
Page 2 / 4
DUT Info Structures de donn´ees et algorithmes fondamentaux 2019–2020 5. Compl´etez la fonction rotation_un_quart(M) pour qu’elle effectue une rotation d’un
quart de tour vers la droite sur la matriceM, comme illustr´e ci-dessous :
6. Compl´etez la fonctionecraser_horizontalement(M)pour qu’elle ´ecrase l’image corres- pondante horizontalement en en retirant une colonne sur deux, comme illustr´e ci-dessous :
7. Compl´etez la fonction ecraser_verticalement(M) pour qu’elle ´ecrase l’image corres- pondante verticalement en en retirant une ligne sur deux, comme illustr´e ci-dessous :
Page 3 / 4
DUT Info Structures de donn´ees et algorithmes fondamentaux 2019–2020 8. Compl´etez la fonctionzoom_out(M)pour qu’elle effectue un “zoom out” surM revenant
`
a diviser sa taille par deux, comme illustr´e ci-dessous :
9. Compl´etez la fonction zoom_in(M) pour qu’elle effectue un “zoom in” sur Mrevenant `a doubler sa taille, comme illustr´e ci-dessous :
Remarque : il est possible qu’un “zoom in” suivi d’un “zoom out” introduise certaines zones noires dans l’image. Vous pouvez tester votre programme sur des images plus petites que celle fournie pour v´erifier votre r´esultat dans ces cas-l`a.
Page 4 / 4