我想把8位输入colorimage的所有数据(Inputfile是a.bmp文件) 在新的16位Mat阵列中。
我这样做是因为我需要总结几个图像补丁,然后为每个像素构建均值。
Mat img = imread(Inputfile); //there now should be values between 0 and 255
寻址蓝色值,例如如下
uchar* ptr = img.data + img.step*row;
cout << ptr[n*col] << endl;
只显示单个字母而没有值。
cout << static_cast<short>(ptr[n*col]) << endl;
对较短或较大的类型转换会显示正确的值。但是对无符号字符的转换(在我看来是正确的数据类型)会显示相同的字母而不是没有任何类型转换。
我知道Short有2个字节,但是每个通道的颜色.bmp应该只有1个Byte颜色信息。由于我需要在最坏情况下总结81(较小的128 = 7位)像素值,我认为短路作为目标值会很棒。
有关正确获取8位值并在16位数组中使用它们的正确方法的任何帮助都会很棒。
谢谢。
答案 0 :(得分:1)
转换工作正常,但如果您将unsigned char发送到输出流中,它将被解释为字符并打印为字符。
另请注意,OpenCV已具有将矩阵转换为其他数据类型的功能。您甚至可以将图像读入首选数据类型的矩阵中:
cv::Mat3s img = cv::imread(...);
使用数据指针会被忽略。阅读OpenCV文档,了解如何以干净的方式访问单个像素或行(迭代器,operator(),operator [] ...)。