Modifications entre les versions 1 et 7 (s'étendant sur 6 versions)
Version 1 à la date du 2013-12-10 22:56:14
Taille: 348
Éditeur: dra13-2-82-237-244-11
Commentaire:
Version 7 à la date du 2013-12-11 12:47:30
Taille: 2406
Éditeur: 178
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
= TP : structures de données et images =
Ligne 3: Ligne 4:
Il s'agit de manipuler à la main un format de fichier: le format d'image [[http://fr.wikipedia.org/wiki/Portable_anymap|PNM]]. 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 [[http://fr.wikipedia.org/wiki/Portable_anymap|PNM]], qui est assez simple pour tout faire soi-même.
Ligne 7: Ligne 8:
 * pinklady.ppm, un fichier d'exemple
 * pnm.py, une implémentation des opérations sur ce format (mais le but est de le faire vous-mêmes)
 * [[attachment:pinklady-ascii.ppm]], un fichier d'exemple;
 * [[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).

Vous pouvez utiliser les fonctions définies dans ce fichier en le renommant '''pnm.py''' et en commençant par importer le module:

{{{#!highlight python
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:

{{{#!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:

   1 import pnm
   2 i = pnm.lire_pnm("pinklady-ascii.ppm")
   3 pnm.afficher_ppm(i)

WikISN: TP format PNM (dernière édition le 2016-03-01 13:25:51 par LionelVaux)