Partie 4 : Vers une bibliothèque de traitement d’images#
Jusqu’ici, nous avons implémenté plusieurs fonctionalités de
traitement d’images. Néanmoins, nous avons dû dupliquer beaucoup de
code d’un fichier à l’autre, comme par exemple les fonctions
lirePGM
. De plus les fichiers commencent à être longs,
avec des fonctions main ayant plusieurs rôles simultanés (lancer les
tests et faire une autre action).
Nous allons maintenant restructurer le code afin d’éviter ces inconvénients grâce à la compilation séparée. Il ne s’agit pas ici de de créer de nouvelles fonctions; simplement d’organiser le code différemment.
Exercice 4.1 (*) Types d’image
Durant le projet plusieurs types pour stocker et manipuler des images
ont été définis. Regrouper tous ces types dans le fichier
image.hpp Par la suite, tous les modules qui auront besoin de
ces types devront inclure image.hpp
.
Exercice 4.2 (*) Module pgm
Plusieurs fonctions de base sur images PGM ont été implémentées et réutilisées dans plusieurs programmes, notamment pour les tests. Afin d’éviter cette duplication de code, nous allons regrouper ces fonctions dans le module pgm.
Consulter le fichier pgm.hpp; il a été prérempli avec les entêtes des fonctions. Attention, c’est un fichier
.hpp
, il ne doit pas contenir le code des fonctionsCompléter le fichier pgm.cpp avec vos fonctions
lirePGM
,ecrirePGM
,inversePGM
.Compléter le fichier pgm-test.cpp avec les tests de ces fonctions.
Utiliser la compilation séparée pour produire
pgm-test
à partir de pgm.cpp et pgm-test.cpp.Exécuter
pgm-test
, et vérifier que les tests passent.
Exercice 4.3 (*) Modules sobel
et seuillage
Procéder de même que dans la section précédente pour compléter les modules sobel.cpp et seuillage.cpp, avec leur fichier d’entête et leurs tests. Vérifier que ces tests passent.
Exercice 4.4 (*) Automatisation avec make
Compiler à la main devient vite fastidieux avec la compilation séparée, puisque à chaque fois on doit se souvenir de toutes les dépendantes: quels sont tous les fichiers qui doivent être compilés en même temps.
make
est un des outils permettant d’automatiser le
processus. Ouvrez le fichier Makefile
avec un éditeur type
gedit
; vous verrez que les dépendances sont indiquées.
(Remarque: vous n’avez pas besoin d’éditer ce fichier).
Avec ce Makefile
, pour compiler pgm-test
(par
exemple), vous n’avez plus qu’à taper la commande suivante dans le
terminal:
make pgm-test
Pour compiler tous les programmes du projet, vous pouvez faire:
make all
Pour lancer tous les tests du projet, vous pouvez faire:
make tests
Exercice 4.5 (*) Utilisation de la bilbiothèque
Le programme TIN.cpp implante un petit «couteau suisse» de traitement d’image permettant d’appliquer tous les filtres que vous avez implanté dans la bibliothèque à des images. Par exemple:
./TIN -e entree.pgm sortie.pgm
applique le filtre de Sobel à l’image dans
entree.pgm
. Pour voir toutes les options:
./TIN -h
Pour utiliser la bibliotheque, vous devez au préalable la compiler en tapant la commande suivante dans le terminal:
make TIN