Question

I have the following code:

cvtColor (image, image, CV_BGRA2RGB);
Vec3b bottomRGB;
bottomRGB=image.at<Vec3b>(821,1232);

When I display bottomRGB[0], it displays a value greater than 255. What is the reason for this?

Was it helpful?

Solution

As you have commented, the reason is that you use cout to print its content directly. Here I will try to explain to you why this will not work.

cout << bottomRGB[0] << endl;

Why "cout" works weird for "unsigned char"?

It will not work because here bottomRGB[0] is a unsigned char (with value 218), cout actually will print some garbage value (or nothing) as it is just a non-printable ASCII character which is getting printed anyway. Note that ASCII character corresponding to 218 is non-printable. Check out here for the ASCII table.

P.S. You can check whether bottomRGB[0] is printable or not using isprint() as:

cout << isprint(bottomRGB[0]) << endl; // will print garbage value or nothing

It will print 0 (or false) indicating the character is non-printable


For your example, to make it work, you need to type cast it first before cout:

cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example) 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top