2014-10-17 88 views
0

我試圖訪問我的cvMat中的數據。如何訪問cvMat中的數據

這裏是我的代碼:

// Declare 
int rank = 3; 
CvMat* warp_matrix = cvCreateMat(rank,rank,CV_32FC1); 

// Using 
cvGetPerspectiveTransform(imgSrc,imgDst,warp_matrix); 

for(int i=0; i<rank; i++) 
{ 
    for(int j=0; j<rank; j++) 
    { 
     std::cout << warp_matrix->data[i][j] << std::endl; 
    } 
} 

但是我趕上了一個錯誤:

error: no match for 'operator[]' (operand types are 'CvMat::<anonymous union>' and 'int') 

我不知道如何解決它 - 我試着CV_MAT_ELEM()這樣的:

std::cout << CV_MAT_ELEM(warp_matrix,double,i,j) << std::endl; 

它仍然不起作用(捕獲此錯誤):

error: request for member 'cols' in 'warp_matrix', which is of pointer type 'CvMat*' (maybe you meant to use '->' ?) 

我不知道現在該做什麼。你可以幫我嗎 ?

+1

你的問題的標題是明確的,這是*** C,不C++ ***。但是您提供的代碼示例顯然是C++。 (例如'std :: cout')。 – ryyker 2015-09-22 13:13:59

+1

您是否試過'printf(「%f」,cvmGet(warp_matrix,i,j));'***從*** [here](http://note.sonots.com/OpenCV/MatrixOperations.html)*** – ryyker 2015-09-22 13:20:40

回答

0

使用宏CV_MAT_ELEM。它期望一個cvMat而不是一個指向cvMat的指針。如果而是需要指針:

mx->data; 

是(每類)的指針的一位不願透露姓名的工會:

mx->data.ptr; // uchar 
mx->data.i; // int 
mx->data.s; // short 
mx->data.db; // double 
mx->data.fl; // float 

注意,這些是一維的,所以MX [行] [COL]的方式來訪問不得上班。考慮例如:

CvMat * mx = cvCreateMat(3, 4, CV_32FC1); 
LOG->PrintLn("%u x %u", mx->cols, mx->rows); 
for(uint rdx = 0; rdx < mx->rows; ++rdx) 
{ 
    for(uint cdx = 0; cdx < mx->cols; ++cdx) 
    { 
     CV_MAT_ELEM(* mx, float, rdx, cdx) = (1 + rdx) * 10 + cdx; 
     LOG->Print("\t%.1f", mx->data.fl[ mx->cols * rdx + cdx ]); 
    } 
    LOG->PrintLn(); 
} 

(矩陣IMGSRC和imgDst在你的例子沒有聲明,所以我不可能產生變換)