我尝试了以下代码来打印此二进制图像的所有白色像素,但均未成功:
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
条件