2012-08-26 57 views
2

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

但是,无论如何有一个cv马特的原始价值?

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

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

输出:

120 

回答

6

当你定义为CV_8UC1可以定义每个元素必须是8位矩阵。这意味着您只能存储0到255之间的值。如果要使用大数字,则应将CV_32UC1定义为unsigned integersCV_32SC1signed 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> 
+0

好吧,我曾试图CV_32SC1但确实焦炭是问题。非常感谢你 – George

+0

@George如果你在内存中使用不正确的类型来分配矩阵,你将来会遇到内存泄漏问题,那将很难调试。 – Alex

+0

好的,我会确保将来会留意这一点。这些细节非常明显,不幸的是文档中没有太多的文字,我自己也没有弄明白。再次感谢您的帮助! – George