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 ;

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;
}
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
 
for(int i = 0; i < hist->rows; i++)
    {
        cout << "value " << i << " = " << ((double)(hist->at<float>(i))) << endl;
 
    }
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.

C'est sûrement une bêtise mais c'est très frustrant. Voyez-vous une erreur ?

Merci d'avance et bonne journée.