第一回談到矩陣的賦值
想當然要取出矩陣某個元素的值是相當容易的
在 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");
}
此程式結果和上個範例是一模一樣的
留言列表