我尝试了以下代码来打印此二进制图像的所有白色像素,但均未成功:

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。

谢谢,

最佳答案

cvtColor将创建一个uchar图像,阈值将保留数据格式,因此您的binImage是由uchar组成的,而不是float的。

更改

binImage.at<float>(i,j)


binImage.at<uchar>(i,j)

并且请记住,由于浮点表示错误,比较浮点数与==通常是个坏主意(即使使用浮点数也是如此)。您可能最终拥有一个充满254.9999999999的矩阵,而从不满足image(i,j)==255条件

10-01 19:51