第一回談到矩陣的賦值

想當然要取出矩陣某個元素的值是相當容易的

在 C++ 函式中只需要呼叫 Mat::at

這一篇要來說說 C 和 C++ 在對矩陣某元素取值的差異

 

 

 

在 C 中,矩陣可以用這個結構 CvMat 來存

裡面有個成員 union 型態的 data 就是拿來放值的

data 中共有五個變數型態對應到宣告的矩陣是什麼變數型態

以下為程式範例(假設矩陣中所有元素均已賦值)

CvMat* mat = cvCreateMat(4, 3, CV_32FC1);

for(int i=0;i<mat->rows;i++){

  for(int j=0;j<mat->cols;j++)

    printf("Mat[%d,%d]:%f ", i, j, mat->data.fl[i*mat->cols+j]);

  printf("\n");

}

可知在 CvMat 中,矩陣的元素是被存放成一維陣列

元素的位址是需要被計算的,如上的 i*mat->cols+j

若元素的型態是 float,則叫用 data.fl

 

 

 

在 C++ 中,矩陣可以用這個類別 Mat 來存

要對元素取值可以說非常容易

如下程式範例(假設矩陣中所有元素均已賦值)

Mat mat = Mat(4, 3, CV_32FC1);

for(int i=0;i<mat.rows;i++){

  for(int j=0;j<mat.cols;j++)

    printf("Mat[%d,%d]:%f ", i, j, mat.at<float>(i, j));

  printf("\n");

}

此程式結果和上個範例是一模一樣的

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 fantasymew 的頭像
    fantasymew

    小孫的狂想世界

    fantasymew 發表在 痞客邦 留言(0) 人氣()