C++ 为什么;";“为”工作;无符号字符“;?

C++ 为什么;";“为”工作;无符号字符“;?,c++,opencv,image-processing,cout,unsigned-char,C++,Opencv,Image Processing,Cout,Unsigned Char,我有以下代码: cvtColor (image, image, CV_BGRA2RGB); Vec3b bottomRGB; bottomRGB=image.at<Vec3b>(821,1232); cvtColor(图像,图像,CV_BGRA2RGB); Vec3b-rgb; bottomRGB=image.at(8211232); 当我显示bottomRGB[0]时,它会显示一个大于255的值。原因是什么?正如您所评论的,原因是您使用cout直接打印其内容。在这里,我将尝试向

我有以下代码:

cvtColor (image, image, CV_BGRA2RGB);
Vec3b bottomRGB;
bottomRGB=image.at<Vec3b>(821,1232);
cvtColor(图像,图像,CV_BGRA2RGB);
Vec3b-rgb;
bottomRGB=image.at(8211232);

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

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

cout << bottomRGB[0] << endl;
它将打印
0
(或
false
),表示该字符不可打印


对于您的示例,要使其工作,您需要在
cout
之前先键入cast it:

cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example) 

cout最可能的解释是图像的位深度高于8位(对于无符号整数,其范围为0-255)。。有关详细信息,请参阅..我也尝试将其转换为CV_8U,但没有帮助您能否上载原始图像(不是使用默认上载程序,而是在可以保留属性的站点上)…这是原始图像:好的,我的坏。你能不能只需要
cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example)