m2b-gd-tp8/demo1.cpp
2021-12-13 08:59:59 +01:00

166 lines
4.2 KiB
C++

/*
demo1.cpp - exemple d'utilisation de Astico2D
CC BY-SA Edouard.Thiel@univ-amu.fr - 22/08/2021
Usage :
$ make demo1
$ ./demo1 [-mag width height] [-thr seuil] image_in [image_out]
*/
/*
Pour le rendu de TP :
- renommez ce fichier tp<n°-de-la-planche>-<vos-noms>.cpp
- écrivez ci-dessous vos NOMS Prénoms et la date de la version :
<NOM1 Prénom1> [et <NOM2 Prénom2>] - version du <date>
*/
#include "astico2d.hpp"
//----------------------- T R A N S F O R M A T I O N S -----------------------
// Placez ici vos fonctions de transformations à la place de ces exemples
void transformer_bandes_horizontales (cv::Mat &img_niv)
{
CHECK_MAT_TYPE(img_niv, CV_32SC1);
for (int y = 0; y < img_niv.rows; y++)
for (int x = 0; x < img_niv.cols; x++)
{
int g = img_niv.at<int>(y,x);
if (g > 0) {
img_niv.at<int>(y,x) = y;
}
}
}
void transformer_bandes_verticales (cv::Mat &img_niv)
{
CHECK_MAT_TYPE(img_niv, CV_32SC1);
for (int y = 0; y < img_niv.rows; y++)
for (int x = 0; x < img_niv.cols; x++)
{
int g = img_niv.at<int>(y,x);
if (g > 0) {
img_niv.at<int>(y,x) = x;
}
}
}
void transformer_bandes_diagonales (cv::Mat &img_niv)
{
CHECK_MAT_TYPE(img_niv, CV_32SC1);
for (int y = 0; y < img_niv.rows; y++)
for (int x = 0; x < img_niv.cols; x++)
{
int g = img_niv.at<int>(y,x);
if (g > 0) {
img_niv.at<int>(y,x) = x+y;
}
}
}
//----------------------------- I N T E R F A C E -----------------------------
class MonApp : public Astico2D {
public:
// Déclarez ici d'autres membres éventuels
MonApp (int argc, char **argv) :
Astico2D (argc, argv)
// initialisez ici vos classes membre éventuelles
{
if (!init_ok) return; // erreur dans l'initialisation
// Autres actions du constructeur
}
void afficher_touches_clavier () override
{
// Ceci affiche l'aide de base
Astico2D::afficher_touches_clavier ();
// Indiquez ici les touches du clavier et vos transformations
std::cout <<
" 1 dessine des bandes horizontales\n"
" 2 dessine des bandes verticales\n"
" 3 dessine des bandes diagonales\n"
<< std::endl;
}
bool traiter_touche_clavier (char key) override
{
switch (key) {
// Gérez ici les touches de flags.
// Rajoutez ici les touches pour effectuer_transformations.
case '1' :
case '2' :
case '3' :
// On mémorise la touche pressée
touche_transfo = key;
// On précise le mode : M_NIVEAUX ou M_COULEURS
mode_transfo = M_NIVEAUX;
break;
default : return false; // touche non traitée
}
return true; // touche traitée
}
void effectuer_transformations () override
{
// Appelez ici vos transformations selon touche_transfo et mode_transfo :
// - si mode_transfo est M_NIVEAUX, l'image d'entrée est l'image seuillée
// img_niv, de type CV_32SC1 ; à la fin, pour l'affichage, il faut la
// convertir en couleur dans img_coul, de type CV_8UC3, par exemple avec
// representer_en_couleurs_vga.
// - si mode_transfo est M_COULEURS, travaillez directement sur img_coul,
// de type CV_8UC3, elle sera affichée telle quelle.
switch (touche_transfo) {
case '1' :
transformer_bandes_horizontales (img_niv);
representer_en_couleurs_vga (img_niv, img_coul);
break;
case '2' :
transformer_bandes_verticales (img_niv);
representer_en_couleurs_vga (img_niv, img_coul);
break;
case '3' :
transformer_bandes_diagonales (img_niv);
representer_en_couleurs_vga (img_niv, img_coul);
break;
}
}
};
//---------------------------------- M A I N ----------------------------------
int main (int argc, char **argv)
{
MonApp app (argc, argv);
return app.run ();
}