我有以下代码:
cvtColor (image, image, CV_BGRA2RGB);
Vec3b bottomRGB;
bottomRGB=image.at<Vec3b>(821,1232);
当我显示bottomRGB[0]
时,显示的值大于255,这是什么原因?
When I display bottomRGB[0]
, it displays a value greater than 255. What is the reason for this?
正如你所评论的,原因是你使用 cout
直接打印其内容.在这里,我将尝试向您解释为什么这行不通.
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;
"cout"
对 "unsigned char"
工作很奇怪?它不会工作,因为这里 bottomRGB[0]
是一个 unsigned char
(值为 218
),cout
实际上会打印一些垃圾值(或什么都不打印),因为它只是一个不可打印 ASCII 字符,无论如何都会打印出来.请注意,对应于 218
的 ASCII 字符是不可打印的.在此处查看 ASCII 表.
"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.
附言您可以使用 bottomRGB[0] 是否可打印>isprint()
为:
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
它将打印0
(或false
)表示字符不可打印
It will print 0
(or false
) indicating the character is non-printable
对于您的示例,要使其工作,您需要在 cout
之前先键入 cast:
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)
这篇关于为什么“cout"?对“无符号字符"工作很奇怪?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!