我有以下代码:
cvtColor (image, image, CV_BGRA2RGB);
Vec3b bottomRGB;
bottomRGB=image.at<Vec3b>(821,1232);
当我显示bottomRGB[0]
时,它会显示一个大于255的值。这是什么原因?
答案 0 :(得分:3)
正如您所评论的那样,原因是您使用cout
直接打印其内容。在这里,我将尝试向您解释为什么这不起作用。
cout << bottomRGB[0] << endl;
"cout"
为什么"unsigned char"
对bottomRGB[0]
有效?它不起作用,因为此处unsigned char
是218
(值cout
),218
实际上会打印一些垃圾值(或者没有),因为它只是一个 不可打印的 ASCII字符,无论如何都会被打印出来。请注意,与bottomRGB[0]
对应的ASCII字符是不可打印的。查看here以获取ASCII表。
P.S。您可以使用isprint()
确认cout << isprint(bottomRGB[0]) << endl; // will print garbage value or nothing
是否可打印:
0
它将打印false
(或cout
),表示该字符不可打印
对于您的示例,要使其正常工作,您需要先在cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example)
之前输入它:
{{1}}