2010-12-22 209 views
4

嘿,夥計, 我有一個小問題,我認爲這對你來說很容易解決。但我仍然不是一個好的程序員。無論如何,問題是我需要訪問矩陣元素(20 * 2),這個矩陣表示圖像中20個特徵的x,y位置。我需要一個參數,可以給我所有他們的價值作爲X和另一個Y;例如P =(所有x值)和q =(所有y值),以便使用它們在圖像上繪圖。訪問數組元素

創建矩陣的函數是一個opencv函數。

CvMat* mat = cvCreateMat(20,2,CV_32FC1); 

其中這個矩陣具有x,y中幀特徵的值。 我已經使用這個代碼打印出來:

float t[20][2]; 
for (int k1=0; k1<20; k1++) 
{ 
    for (int k2=0; k2<2; k2++) 
     { 
     t[k1][k2] = cvmGet(mat,k1,k2); 
     std::cout<< t[k1][k2]<<"\t"; 
       } 
} 



std::cout <<"  "<< std::endl; 
std::cout <<"  "<< std::endl; 
std::cout <<"  "<< std::endl; 
    } 

此代碼進行的順利,但正如我上面提到的傢伙,我要簽名的值的參數,以便使用它們?

謝謝。

回答

1

你想是這樣的:

void GetMatrixElem(float t [][2] ,int x ,int y ,float** val) 
{ 
    if (val) // && (x >= 0) && (x < 20) && (y>=0) && (y<2) 
     *val = &t[x][y]; 
} 

// ... 

float t [20][2]; 
float* pElem = NULL; 
GetMatrixElem(t ,10 ,1 ,&pElem); 

的行和列,您可以使用這樣的事情:

void GetClmn(float t[][2] ,int y ,float* pClmn[]) 
{ 
    for(int x = 0; x < 20; x++) 
    { 
     pClmn[x] = &t[x][y]; 
    } 
} 


void GetRow(float t[][2] ,int x ,float* pRow[]) 
{ 
    for(int y = 0; y < 2; y++) 
    { 
    pRow[y] = &t[x][y]; 
    } 
} 

用法:

float* pClm[20]; 
GetClmn(t ,1 ,pClm); 
float* pRow[2]; 
GetRow(t ,19 ,pRow); 
+0

抱歉遲到的回答。但問題並沒有解決。 比方說,我想要pElem作爲整數,但如何根據我的代碼做到這一點。我無法將其修改爲您的代碼,因爲我正在使用該矩陣。 – Mario 2010-12-24 15:54:26