我正在努力将大整数(例如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
答案 0 :(得分:6)
当您将矩阵定义为CV_8UC1
时,您定义每个元素必须为8位。这意味着您只能存储0到255之间的值。如果要使用大数字,则应将CV_32UC1
的矩阵定义为unsigned integers
,CV_32SC1
的矩阵定义为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>