2016-05-18 101 views
0

我想制作一个标识矩阵,然后从其对角元素中减去一些不同的浮点数。这是我做了什么:访问单位矩阵中的元素

cv::Mat R = cv::Mat::eye(trainingMat.rows,trainingMat.rows, CV_32F); 

trainingMat是其他矩阵)这里是奇怪的事情。当我写:

std::cerr<<R.at<double>(0,0)<<std::endl; 

我得到一个奇怪的数字(但它应该是1.0f的权利?)。当我这样做:

for(unsigned int i = 0; i < trainingMat.rows; i++){ 
      std::cerr<<R.at<double>(i,i)<<std::endl; 
     } 

再次我得到一些奇怪的数字。我究竟做错了什么?

+2

请参阅http://stackoverflow.com/questions/15130162/how-to-access-pixel-values-of-cv-32f-cv-64f-mat试试'R.at (0,0)' – francis

+0

或者定义你的Mat类型'CV_64F' – Miki

+0

“但它应该是1.0f” - 你明确地转换为'double',你为什么期望得到一个'float'(不同类型)? –

回答

1

我遇到过这种情况好几次了,结果出现了错误类型的问题。 以下是您可能会记住的一些配对。

CV_8U <-> uchar 
CV_32S <-> int 
CV_32F <-> float 
CV_64F <-> double 

TYPE float占用4个字节,而double占用8个字节的内存。 您尝试使用采取一个元素,但其实,你把元素,并使用这两个代表之一。所以你得到了意想不到的数字。