1

我想将 8 位输入彩色图像(Inputfile 是 a.bmp 文件)的所有数据放入一个新的 16 位 Mat Array 中。

我这样做是因为我需要总结几个图像补丁,然后为每个像素建立平均值。

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;

类型转换为更短或更大会产生正确的值。但是转换为 unsigned char (我认为这是正确的数据类型)与没有任何类型转换的情况相同。

据我所知,Short 有 2 个字节,但是颜色 .bmp 每个通道应该只有 1 个字节的颜色信息。因为我需要在最坏的情况下总结 81 个(较小的 128=7 位)像素值,所以我认为作为目标值的 short 会很棒。

有关简单访问 8 位值并在 16 位数组中使用它们的正确方法的任何帮助都会很棒。

谢谢你。

4

1 回答 1

1

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

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

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

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

于 2012-04-25T15:29:50.217 回答