IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Création d'histogramme


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut Création d'histogramme
    Bonjour,
    Je désire créer l'histogramme d'une image, afin de determiner le différents niveaux de gris.
    Je me suis inspirée d'un code pour créer le suivant.
    Le problème est que je ne suis pas sure que ce soit bien l'histogramme en niveau de gris, de plus, comment inserer une echelle?
    Merci d'avance.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include <math.h>
    #include <cv.h>
    #include <highgui.h>
    #include <cxcore.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <cvcam.h>
     
     
    int main()
    {
        IplImage *image, *ellipse, *histimg=0, *histog=0;
    	CvHistogram *hist;    
        int hdims = 255;
     
        image = cvLoadImage ("1.jpg",1); 
        histog = cvCreateImage( cvGetSize(image), 8, 1 );
        cvNamedWindow("image",1);                   
       	histimg = cvCreateImage( cvSize(320,200), 8, 3 );
        cvNamedWindow( "histo", 1 );
     
        float hranges_arr[] = {0,255};
        float* hranges = hranges_arr;
        int vmin = 10, vmax = 256, smin = 30;
        float max_value = 0;
        int bin_w;
        hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 );  
     
       	cvCalcHist( &histog, hist, 0, 0 );
       	cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 );
       	cvConvertScale( hist->bins, hist->bins, max_value ? 255. / max_value : 0., 0 );    
       	cvZero( histimg );  
     
      	bin_w = histimg->width / hdims;
        CvScalar colorr = cvScalar(0, 255, 255,0);
     
        for( int i = 0; i < hdims; i++ )
        {
            int val = cvRound( cvGetReal1D(hist->bins,i)*histimg->height/255 );
            cvRectangle( histimg, cvPoint(i*bin_w,histimg->height),
                         cvPoint((i+1)*bin_w,histimg->height - val),
                         colorr, -1, 8, 0 );
        }           
        cvShowImage("image",image);
        cvShowImage ("histo", histimg);
        cvWaitKey(0);
    }

  2. #2
    Membre averti
    Étudiant
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut améliorations apportées
    Je suis parvenue a créer correctement mon histogramme (problèmes de canaux, résolus).
    Ma seule question à présent concerne l'affichage des niveaux de gris en bas de l'image, est ce possible et si oui quelqu'un peut il m'expliquer comment proceder.
    Merci

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut
    Finalement je me suis rendue compte que l'histogramme que je crée ne correspond absolument pas à ce que je recherche, d'ailleur je ne sais pas à quoi il correspond.
    Si quelqu'un pouvait m'aider...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bah c'est franchment pas compliqué...

    Reprenons la définition...

    Qu'est-ce que c'est que l'histogramme de l'image ????

    Un tableau donnant le nombre de pixels ayant une certaine valeur d'intensité, et décrivant l'ensemble des intensités.

    Donc en pseudo-code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Histo = tableau d entiers de N cases 
    (N = nombre de niveaux de l image : 8 bits : N = 256)
     
    /* Initialisation */
    Pour i = 1 à i = N 
       Initialiser Histo[i] à 0
    Fin Pour
     
    /* Calcul de l'histogramme */
    Pour i = 1 à i = Nlignes
       Pour j = 1 à j = NColonnes
          Histo [ Image(i,j) ] = Histo [ Image(i,j) ] + 1 
       Fin Pour
    Fin Pour
    Image(i,j) est la valeur du pixel (i,j) de l'image


    Ensuite, tu détermines la largeur et la hauteur sur laquelle tu veux tracer ton histograme (largeur, hauteur).

    La largeur d'une case sera largeur/N

    Tu calcules la maximum de l'histogramme.

    Et ensuite tu traces

    pseudo-code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    /* Calcul du max */
    Max = 0
    Pour i = 1 à i = N
       Si Histo[i] > Max
            Max = Histo[i]
       Fin Si
    Fin Pour
     
    /* Trace */
    Pour i = 1 à i = N
     
        Met Couleur de tracé à couleur(i)
     
        X1 = i * largeur/N
        X2 = X1 + largeur/N
        Y1 = YBase
        Y2 = Y1 + ( hauteur * (Histo[i]/Max) )
     
        Trace rectangle ( X1, Y1, X2, Y2 )
     
    Fin Pour

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut
    Merci pour cette aide.
    Je suis parvenue à crée mon histogramme, au lieu d'une echelle, j'ai crée un affichage en dos qui me donne pour chaque valeur d'echelle mon nombre de pixel correspondant.
    Problème résolu!!!

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 94
    Par défaut histogramme
    bonjours;
    j'ai aussi besoin de réaliser l'histogramme d'une image mais je ne réussi pas
    svp aidez-moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/04/2015, 22h20
  2. Création d'histogramme - Des commentaires ?
    Par Perplexe dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 30/11/2009, 14h40
  3. [Artichow] Création d'histogrammes en PHP
    Par gabi27685 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/05/2008, 17h29
  4. création d'histogrammes en delphi win32
    Par paolo2002 dans le forum Delphi
    Réponses: 2
    Dernier message: 05/07/2006, 13h15
  5. Création XLS avec histogramme
    Par ericw78 dans le forum Documents
    Réponses: 5
    Dernier message: 07/02/2006, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo