2016-05-18 125 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個字節的內存。 您嘗試使用採取一個元素,但其實,你把元素,並使用這兩個代表之一。所以你得到了意想不到的數字。