我有以下代码:
cvtColor (image, image, CV_BGRA2RGB);
Vec3b bottomRGB;
bottomRGB=image.at<Vec3b>(821,1232);
当我显示bottomRGB[0]
,它显示的值大于255。这是什么原因?
正如您所评论的,原因是您使用cout
直接打印其内容。在这里我将尝试向您解释为什么这行不通。
cout << bottomRGB[0] << endl;
Why "cout"
工作很奇怪"unsigned char"
?
它不会工作,因为这里bottomRGB[0]
is a unsigned char
(有值218
), cout
实际上会打印一些垃圾值(或什么都没有),因为它只是一个不可打印ASCII 字符无论如何都会被打印出来。请注意,对应的 ASCII 字符218
是不可打印的。查看here http://www.asciitable.com/对于 ASCII 表。
附:您可以检查是否bottomRGB[0]
可打印或不使用isprint() http://en.cppreference.com/w/cpp/string/byte/isprint as:
cout << isprint(bottomRGB[0]) << endl; // will print garbage value or nothing
它将打印0
(or false
) 表示该字符不可打印
对于您的示例,要使其工作,您需要先输入cast itcout
:
cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)