reinterpret_cast并与CV_MAT_ELEM一起使用

时间:2012-04-25 15:13:50

标签: c++ opencv

我想把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位数组中使用它们的正确方法的任何帮助都会很棒。

谢谢。

1 个答案:

答案 0 :(得分:1)

转换工作正常,但如果您将unsigned char发送到输出流中,它将被解释为字符并打印为字符。

另请注意,OpenCV已具有将矩阵转换为其他数据类型的功能。您甚至可以将图像读入首选数据类型的矩阵中:

cv::Mat3s img = cv::imread(...);

使用数据指针会被忽略。阅读OpenCV文档,了解如何以干净的方式访问单个像素或行(迭代器,operator(),operator [] ...)。