大整数的cv::Mat

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
1个回答

7
当您将矩阵定义为CV_8UC1时,您定义了每个元素必须是8位。这意味着您只能存储0到255之间的值。如果您想使用较大的数字,应将矩阵定义为CV_32UC1(无符号整数)或CV_32SC1(有符号整数)。此外,您应该将值存储为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>

好的,我已经尝试了CV_32SC1,但实际上是char引起了问题。非常感谢你。 - George
@George,如果你在矩阵内存分配中使用了错误的类型,那么将来你将面临内存泄漏问题,这将非常难以调试。 - Alex
好的,我会确保将来注意这个问题。这些细节非常明显,不幸的是文档中没有太多的说明,而我自己也没能弄清楚。再次感谢您的帮助! - George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接