3

我正在努力将大整数(例如 2942584)放入 cv Mat 中。唯一接受它的类型是 CV_8UC1,但它将值从 2942584 更改为 120(显然是 8 位)。

但是无论如何在 cv Mat 中有原始值吗?

如果有帮助,这是简单的代码:

Mat matrix(6,10,CV_8UC1);
matrix.at<char>(0,0) = 2942584;
cout << (int)matrix.at<char>(0,0);

输出:

120
4

1 回答 1

7

当您定义矩阵时,CV_8UC1您定义每个元素必须是 8 位。这意味着您只能存储 0 到 255 之间的值。如果您想使用一个大数字,您应该将矩阵定义为CV_32UC1forunsigned integersCV_32SC1for signed integers。此外,您应该存储一个值int而不是char并以适当的方式读取它。

更正确的代码是

Mat matrix(6,10,CV_32SC1); 
matrix.at<int>(0,0) = 2942584;
cout << (int)matrix.at<int>(0,0);

还有一件事:矩阵元素的格式如下

CV_<NUMBER_OF_BITS><SIGNED/UNSIGNED>C<NUMBER_OF_CHANNELS>
于 2012-08-26T18:59:11.923 回答