andrestoga andrestoga - 1 year ago 101
C++ Question

Access Mat binary images elements in OpenCV

I tried the following code to print all the white pixels of this binary image without success:

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(! ) // 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 ==<float>(i,j))
cout <<<float>(i,j) << endl;

If I print the values that are not zeroes I get strange values but not 255.


Answer Source

cvtColor will create a uchar image, and threshold will keep the data format, so your binImage is made up of uchars, and not float's.



and keep in mind that comparing floats with == is usually a bad idea (even when you work with floats), because of floating-point representation errors. You may end up having a matrix full of 254.9999999999, and never meet the image(i,j)==255 condition

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download