为什么“cout”对于“unsigned char”来说很奇怪?

时间:2014-01-27 07:01:32

标签: c++ opencv image-processing cout unsigned-char

我有以下代码:

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

当我显示bottomRGB[0]时,它会显示一个大于255的值。这是什么原因?

1 个答案:

答案 0 :(得分:3)

正如您所评论的那样,原因是您使用cout直接打印其内容。在这里,我将尝试向您解释为什么这不起作用。

cout << bottomRGB[0] << endl;

"cout"为什么"unsigned char"bottomRGB[0]有效?

它不起作用,因为此处unsigned char218(值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}}