我在将大整数(例如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
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>