2012-10-31 44 views
0

由於對estimateRigidTransform()的調用,我得到一個名爲「trans」的cv :: Mat對象。要檢索其所含的矩陣我試圖訪問其內容是這樣的:編譯CV_MAT_ELEM錯誤

for (i=0; i<2; i++) for (j=0; j<3; j++) 
{ 
    mtx[j][i]=CV_MAT_ELEM(trans,double,i,j); 
} 

不幸與VS2010我得到一個編譯錯誤

error C2228: left of '.ptr' must have class/struct/union 

與CV_MAT_ELEM行。當我解開這個宏,我覺得像

(mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col)) 

當我刪除了「.ptr」的背後(墊)。數據對其進行編譯。但我無法想象這是解決方案(或無法想象這是一個錯誤,我是唯一一個注意到它的人)。那真的有什麼不對?

謝謝!

回答

1

您不能像這樣訪問mat元素。對於穿越在這裏看到我的其他答案示例代碼: color matrix traversal

或查看灰度墊OpenCV的refman:

Mat M; // should be grayscale 
int cols = M.cols, rows = M.rows; 
for(int i = 0; i < rows; i++) 
{ 
    const double* Mi = M.ptr<double>(i); 
    for(int j = 0; j < cols; j++) 
    { 
    Mi[j]; // is the matrix element. 
    } 
} 
0

只是一個附錄從我身邊:同時,我也發現CV_MAT_ELEM預計的結構與CvMat( OpenCV-C接口),但不包括cv :: Mat(C++接口)。這就是爲什麼我得到這個有趣的錯誤。從cv :: Mat到CvMat的轉換隻需轉換成CvMat即可完成。有趣的OpenCV中的C和C++接口混淆...