Bonjour,
Je rencontre un comportement que je ne parviens pas à comprendre. J'ai une image en niveaux de gris qui contient du noir(0), du blanc (255) et du gris (77) (je suis formel là-dessus).
Je crée un histogramme 1 dimension de cette image, comme ceci ;
Puis j'affiche la valeur de chacun des bin de cet histogramme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Mat buildGrayHist(Mat grayImage) { Mat hist, src = grayImage.clone(); int bins = 256; int histSize[] = {bins}; float rangeGray[] = {0, 255}; const float* rangesGray[] = {rangeGray}; int channels[] = {0}; calcHist( &src, 1, channels, Mat(), hist, 1, histSize, rangesGray); return hist; }
Résultat, j'obtiens des pixels noirs ( value = 0 ), des pixels gris ( value = 77 ) mais aucun pixel blanc ( pour value = 255, j'ai 0 pixels ). C'est incompréhensible pour moi. Pourquoi aucun pixel blanc n'est comptabilisé ? J'ai pourtant bien établi la valeur des bins entre 0 et 255. Quand je comptabilise l'ensemble des pixels dans l'historgramme, il en manque un certain nombre ( les pixels blancs j'imagine ) par rapport au nombre de pixels de l'image originale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for(int i = 0; i < hist->rows; i++) { cout << "value " << i << " = " << ((double)(hist->at<float>(i))) << endl; }
C'est sûrement une bêtise mais c'est très frustrant. Voyez-vous une erreur ?
Merci d'avance et bonne journée.
Partager