Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affiche Histo

SDL2

    20 janvier 2021 à 21:21:25

    Bonjour à tous,

    Je sais pas si il y en a parmi vous qui ont déjà traité se sujet mais voilà, j'aimerais afficher un Histogramme d'une image malheuresement je n'ai aucune directive. pouvez vous m'aider a résoudre ce problème.

    Merci d'avance.

    -
    Edité par Max2300 20 janvier 2021 à 21:28:15

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2021 à 22:36:03

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        21 janvier 2021 à 12:07:53

        Bonjour à tous,

        Je sais pas si il y en a parmi vous qui ont déjà traité se sujet mais voilà, j'aimerais afficher un Histogramme d'une image avec la sdl2, malheureusement je n'ai aucune directive. Pouvez vous m'aider a résoudre ce problème. C'est l'une de mes premières intervention sur le forum si mon message comporte des erreurs qui vont a l'encontre des règles, je peut le supprimer ou l’éditer. 

        Merci d'avance!

        #include <stdlib.h>
        #include <math.h>
        #include "IHM.h"
        
        // position de l'histogramme dans l'interface
        #define HISTO_L 525
        #define HISTO_B 580
        #define zoom 5
        
        
        // ajouter ici les signatures de vos actions paramétrées
        int get_pixel (unsigned int c, unsigned int l, unsigned char* im );
        void set_pixel (unsigned int c, unsigned int l, unsigned char v, unsigned char* im);
        void afficheZoom (unsigned int top, unsigned int left, unsigned int x, unsigned int y, unsigned int f, unsigned char* im);
        void calculerHisto (unsigned char* im, unsigned char* histo);
        void afficheHisto (unsigned char* h, unsigned int left, unsigned int bottom);
        void binariser (unsigned int s, unsigned char* im);
        
        
        
        //programmation de la procédure set_pixel
        void set_pixel (unsigned int c, unsigned int l, unsigned char v, unsigned char* im)
        {
            if(l>=0 && l<HAUTEUR_IMAGE && c>=0 && c<LARGEUR_IMAGE)
            {
                im[LARGEUR_IMAGE*l+c] = v ;
            }
        }
        
        // programmation de la fonction get_pixel
        int get_pixel (unsigned int c, unsigned int l, unsigned char* im )
        {
            if(l>=0 && l<HAUTEUR_IMAGE && c>=0 && c<LARGEUR_IMAGE)
            {
                return im[LARGEUR_IMAGE*l+c];
            }
            else
                return 0;
        }
        void afficheZoom (unsigned int top, unsigned int left, unsigned int x, unsigned int y, unsigned int f, unsigned char* im)
        {
        
            for(int i=0; i<f*f; i++)
                for(int j=0; j<f*f; j++)
                {
                    int n=get_pixel(x-23+j,y-23+i,im);
                    IHM_rectangle(left+j*f,top+i*f,8,8,IHM_couleur(n,n,n));
                }
        }
        afficheHisto(unsigned int* h, unsigned int left, unsigned int bottom)
        {
        
        h[0]=0;
         h[510]=256;
        for(int i=0;i<256;i++)
        {
        
         IHM_rectangle(HISTO_L,(HISTO_B-100 ),100,256,IHM_couleur(255,255,255));
         }
        
        
        
        }
        int main ( int argc, char** argv )
        {
        
            // mes variables
            char c;
        
            // tableau contenant l'image
            unsigned char mimage[HAUTEUR_IMAGE * LARGEUR_IMAGE];
            unsigned int* h[256];
        
            //   ma position
            int x;
            int y;
        
            // initialisation de la fenêtre
            IHM_init();
        
            // initialisation du tableau à partir du fichier image
            IHM_charge_BMP(mimage, "lena_gray.bmp");
            // copie du tableau dans l'affichage
            IHM_set_image(mimage);
        
            // boucle principale de l'IHM
            while (!IHM_quitter())
            {
                // on commence par effacer
                IHM_efface();
        
        
                x = IHM_souris_x();
                y = IHM_souris_y();
                c = IHM_getChar();
        
        
                // les traitements en fonction des caractères tapés
                switch(c)
                {
                case 'b':
                    // faire la binarisation
                    break;
                // faire les croix N&B.
                case 'c':
                    for (int lig =0; lig<HAUTEUR_IMAGE ; lig++)
                    {
                        set_pixel(lig,LARGEUR_IMAGE/2, 255, mimage);
                    }
                    for (int col =0; col<LARGEUR_IMAGE ; col++)
                    {
                        set_pixel(HAUTEUR_IMAGE/2,col, 255, mimage);
                    }
                    for (int lig =0; lig<HAUTEUR_IMAGE ; lig++)
                    {
                        set_pixel(lig, lig, 0, mimage);
                    }
                    for (int lig =0; lig<HAUTEUR_IMAGE ; lig++)
                    {
                        set_pixel(HAUTEUR_IMAGE-1-lig,lig, 0, mimage);
                    }
                    IHM_set_image(mimage);
                    break;
                case 'l':
                    IHM_charge_BMP(mimage, "lena_gray.bmp");
                    IHM_set_image(mimage);
                    break;
                case 'a':
                    IHM_charge_BMP(mimage, "archives.bmp");
                    IHM_set_image(mimage);
                    break;
                case 'h':
                    // re-calculer l'histogramme
                   // calculHisto(mimage,histogramme);
                    break;
                    //updating du zoom
                }
                if (IHM_souris_boutonG()){
                        int i;
                        printf("c'est x=%d",x);
                        printf("/n c'est y= %d ",y);
                    for(i=0;i<256;i++){
                            if(600 && 500<y<600){
                                    int seuil=1;
                            }
                    }
                }
        
        
                // ajouter l'image :
                IHM_affiche_image(10,10);
        
                // position du zoom
                //IHM_rectangle(550,10,8*11,8*11,IHM_couleur(255,255,255));
                //IHM_rectangle(550,10,8,8,IHM_couleur(get_pixel(y-10,x-10,mimage),get_pixel(y-10,x-10,mimage),get_pixel(y-10,x-10,mimage)));
                afficheZoom(10, 550, x, y, zoom, mimage);
                //calcule de l'histogramme
                //calculerHisto()
                // position de l'histogramme
                afficheHisto(h,HISTO_L, HISTO_B-100);
        
        
        
        
        
                // on met à jour l'affichage
                IHM_affiche();
            }
            // fin de la boucle principale
        
            return 0;
        }
        



        • Partager sur Facebook
        • Partager sur Twitter
          22 janvier 2021 à 19:30:36

          Bonsoir,

          Je n'ai jamais fait cela, mais selon ma compréhension de ce code, qui est incomplet, la fonction :

          void afficheHisto (unsigned char* h, unsigned int left, unsigned int bottom);

          affiche juste les données de l'histogramme contenu dans h

          La fonction qui calcule les données de l'histogramme serait :

          void calculerHisto (unsigned char* im, unsigned char* histo);

          or, cette fonction n'est pas implémentée.

          La première chose à faire est de calculer l'histogramme à partir des données de l'image.

          Comme il s'agit d'une image de dégradés de gris, tu as un calcul assez simple à faire pour dénombrer le nombre de pixels du plus sombre au plus clair (du plus noir au plus clair, donc certainement de 0 à 255 selon le type de données figurant dans ton image).

          Une brève recherche sur ce qu'est un histogramme d'une image en dégradés de gris t'amène à des informations assez claires sur ce que l'on attend de toi, il me semble.

          https://www.sites.univ-rennes2.fr/arts-spectacle/cian/image_numFlash/pdf/chap5_cours51.pdf

          Après, c'est à toi de prendre tes responsabilités. Si le sujet n'est pas clair et que tu peux interroger ton enseignant pour clarifier ce qu'il attend, fais le. Si cela fait partie de l'exercice que de rechercher ce qu'est un histogramme d'une image en dégradés de gris et comment on le représente, fais le aussi.

          :-)

          -
          Edité par Dlks 22 janvier 2021 à 19:32:19

          • Partager sur Facebook
          • Partager sur Twitter

          Affiche Histo

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown