1

次のコードを試して、このバイナリ イメージのすべての白いピクセルを印刷しようとしましたが、成功しませんでした。

Mat grayImage;
Mat rgb_Image;
int Max_value = 255;
int Global_Threshold = 155;

rgb_Image = imread( "../Tests/Object/Object.jpg", CV_LOAD_IMAGE_COLOR);   // Read the file

if(! rgb_Image.data )  // Check for invalid input
{
        cout <<  "Could not open or find the image" << endl ;
        return -1;
}

//Convert to Grayscale.
cvtColor(rgb_Image, grayImage, CV_BGR2GRAY);

//Binarize the image with a fixed threshold.
threshold( grayImage, binImage, Global_Threshold, Max_Value, 0);

//Printing white pixels
for(int i = 0; i < 640; i++)
{
    for(int j = 0; j < 480; j++)
    {
        if(255 == binImage.at<float>(i,j))
        {
            cout << binImage.at<float>(i,j) << endl;
        }
    }
}

ゼロではない値を出力すると、奇妙な値が得られますが、255 ではありません。

ありがとう、

4

2 に答える 2

4

cvtColor は uchar 画像を作成し、しきい値はデータ形式を保持するため、binImage は float ではなく uchar で構成されます。

変化する

binImage.at<float>(i,j)

binImage.at<uchar>(i,j)

また、float を と比較する==ことは、浮動小数点表現エラーのため、通常は (float を使用する場合でも) 悪い考えであることに注意してください。でいっぱいの行列になる可能性があり、条件254.9999999999を決して満たすことはありませんimage(i,j)==255

于 2012-07-11T14:24:38.223 に答える