我尝试使用以下代码打印此二进制图像的所有白色像素但未成功:
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。
谢谢,
答案 0 :(得分:4)
cvtColor将创建一个uchar图像,阈值将保留数据格式,因此你的binImage是由uchars组成的,而不是float的。
更改
binImage.at<float>(i,j)
到
binImage.at<uchar>(i,j)
并记住,将浮点数与==
进行比较通常是一个坏主意(即使使用浮点数),因为浮点表示错误。您可能最终得到一个满254.9999999999
的矩阵,并且永远不会满足image(i,j)==255
条件
答案 1 :(得分:1)
你需要将它投射到浮动状态。
虽然图像是openCV浮点数,但它仍然存储在unsigned char *数据块中(因此可以很容易地转换)所以&#34;&lt;&lt;&#认为它收到一个C字符串并打印二进制数据,直到它看到&#39; 0&#39;