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