2142
Commentaire:
|
2406
|
Texte supprimé. | Texte ajouté. |
Ligne 9: | Ligne 9: |
* [[attachment:pnm.py]], une implémentation de toutes les opérations sur ce format que l'on évoque dans la suite (mais le but est de le faire vous-mêmes). | * [[attachment:pnm_v2.py]], une implémentation de toutes les opérations sur ce format que l'on évoque dans la suite (mais le but est de le faire vous-mêmes). |
Ligne 11: | Ligne 11: |
Vous pouvez utiliser les fonctions définies dans ce fichier en commençant par importer le module: | Vous pouvez utiliser les fonctions définies dans ce fichier en le renommant '''pnm.py''' et en commençant par importer le module: |
Ligne 16: | Ligne 16: |
Ligne 36: | Ligne 37: |
Le programme suivant doit afficher l'image d'exemple, en supposant que les deux fichiers sont dans le même répertoire: {{{#!highlight python import pnm i = pnm.lire_pnm("pinklady-ascii.ppm") pnm.afficher_ppm(i) }}} |
TP : structures de données et images
C’est la séance 1B2 de la formation 2013-2014.
Il s'agit de manipuler à la main (en Python) des structures de données pour représenter des images. On va suivre le format d'image PNM, qui est assez simple pour tout faire soi-même.
Pour référence:
pinklady-ascii.ppm, un fichier d'exemple;
pnm_v2.py, une implémentation de toutes les opérations sur ce format que l'on évoque dans la suite (mais le but est de le faire vous-mêmes).
Vous pouvez utiliser les fonctions définies dans ce fichier en le renommant pnm.py et en commençant par importer le module:
1 import pnm
Structure de donnée utilisée
On va tout représenter avec les structures de données élémentaires de Python: nombres, chaînes de caractères, listes, dictionnaires.
Une image est représentée par un dictionnaire contenant les entrées suivantes:
format est une chaîne de caractères, dont la valeur peut être
couleur pour une image en couleurs (on utilisera principalement ce cas-là)
gris pour une image en niveaux de gris
bitmap pour une image en noir et blanc
largeur est un entier qui indique le nombre de pixels en largeur
hauteur est un entier qui indique le nombre de pixels en hauteur
donnees est une liste contenant les valeurs des pixels, en fonction du format
pour couleur, chaque pixel correspond à 3 valeurs, pour les trois composantes rouge, vert, bleu; le pixel de coordonnées (x,y) commence donc à l'indice (largeur×y+x)×3
pour gris, chaque pixel correspond à une valeur qui est son niveau de gris
pour bitmap, huit pixels consécutifs correspondent à une valeur du tableau (un bit par pixel)
Le module pnm fournit en particulier les fonctions suivantes:
pnm.lire_pnm(nom_fichier) lit un fichier et renvoie la structure de données associée
pnm.afficher_ppm(image) affiche une image (supposée être au format couleur) dans une fenêtre Tkinter
Le programme suivant doit afficher l'image d'exemple, en supposant que les deux fichiers sont dans le même répertoire: