/* 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-.cpp - écrivez ci-dessous vos NOMS Prénoms et la date de la version : [et ] - version du */ #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(y,x); if (g > 0) { img_niv.at(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(y,x); if (g > 0) { img_niv.at(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(y,x); if (g > 0) { img_niv.at(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 (); }