2011-02-05 5 views
6

Je souhaite créer un histogramme dans un programme C# utilisant EMGU. EMGU contient une classe appelée MCvHistogram, mais je ne sais pas comment l'utiliser.Comment créer un histogramme

+0

Cet article montre comment créer un histogramme RVB http://stackoverflow.com/questions/8204822/how-to-draw-histogram-using-emgucv-and-c-sharp – JiP

Répondre

11

Vous devez utiliser la classe DenseHistogram si vous souhaitez utiliser EmguCV. Je vais vous montrer l'utilisation de base:

// Create a grayscale image 
    Image<Gray, Byte> img = new Image<Gray, byte>(400, 400); 
    // Fill image with random values 
    img.SetRandUniform(new MCvScalar(), new MCvScalar(255)); 
    // Create and initialize histogram 
    DenseHistogram hist = new DenseHistogram(256, new RangeF(0.0f, 255.0f)); 
    // Histogram Computing 
    hist.Calculate<Byte>(new Image<Gray, byte>[] { img }, true, null); 

Il y a beaucoup d'autres méthodes communes à l'intérieur de la classe DenseHistogram tels que Back Projection

+0

Thanx .. mais Je calcule déjà l'histogramme en utilisant CvInvoke.cvCalHist(), mais je trouve que la méthode ci-dessus est beaucoup plus facile à utiliser. Pouvez-vous brièvement expliquer la différence entre McvHistogram et DenseHistogram? –

+2

DenseHistogram est la classe managée qui enveloppe McvHistogram. Vous pouvez inspecter la classe DenseHistogram et vérifier qu'elle possède une propriété MCvHistogram. Ma suggestion est de ne pas utiliser cvinvoke lorsque la fonctionnalité opencv a déjà été enveloppée dans une classe gérée correcte ... –

3

Vous pouvez utiliser cet extrait de code:

histogramBox.GenerateHistograms(image,bin);    
histogramBox2.Refresh(); 

Il créera un histogramme de votre image automatiquement.

+0

Comment savez-vous quelle valeur passer pour bin? – gonzobrains

+0

Aussi, pourquoi avez-vous deux boîtes d'histogramme? – gonzobrains

Questions connexes