CvMat資料結構的操作
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>
int ElemType;
int MatDims;
int DiagRows;
int DiagCols;
int main()
{
CvMat *Matrix1;
CvMat GetMatrixRows;
CvMat GetMatrixCols;
CvMat GetMatrixDiag;
CvScalar Scalar1,Scalar2;
Matrix1=cvCreateMat(20,10,CV_32FC3);
ElemType=cvGetElemType(Matrix1);
MatDims=cvGetDims(Matrix1);
cvSet2D(Matrix1,3,3,cvScalar(34,2.6,9.9));
cvGetRows(Matrix1,
&
GetMatrixRows,5,10);cvGetCols(Matrix1,
&
GetMatrixCols,3,7);cvGetDiag(Matrix1,
&
GetMatrixDiag,0);DiagRows=cvGetDimSize(Matrix1,0);
DiagCols=cvGetDimSize(Matrix1,1);
Scalar1=cvGet2D(Matrix1,3,3);
printf("ElemType is : %d\n",ElemType);
printf("MatDims is : %d\n",MatDims);
printf("DiagRows is : %d\n",DiagRows);
printf("DiagCols is : %d\n\n",DiagCols);
printf("The Scalar 2D (3,3) Channels is : %.1f %.1f %.1f\n",Scalar1.val[0],Scalar1.val[1],Scalar1.val[2]);
printf("Diag list :\n");
for(int i=0;i<10;i++)
{
Scalar2=cvGet2D(
&
GetMatrixDiag,i,0);printf("%.1f %.1f %.1f\n",Scalar2.val[0],Scalar2.val[1],Scalar2.val[2]);
}
system("pause");
}
執行結果:
上面的程式為一些矩陣基本的操作,這邊跟前面不同的是使用到cvCreateMat()創造矩陣,而跟前面cvMat()不一樣的地方,cvMat()是初始化已經有空間的CvMat資料結構,而cvCreateMat()則是創造CvMat空間並且將矩陣初始化,所以要用指標來接,cvGetElemType()是取的矩陣參數代號,這邊矩陣參數代號是用公式來計算的,因此要知道矩陣代號就必須要用副程式執行,而cvGetDims(),cvGetDimSize(),cvSet2D(),cvGet2D()則是跟前面的用法一樣,只不過把寬跟高換成欄(colunms)跟列(rows),cvGetRows()則是擷取特定列數為5~10列,cvGetCols()為擷取特定欄數,為3~7欄,cvGetDiag()則是擷取對角線,數據會被放在列上面,變成10*1的矩陣,因為20*10的矩陣對角線最多也才10個,最後再將對角線取得的結果印出.
cvCreateMat()
創立CvMat資料結構,給予CvMat資料結構空間,並且初始化,第一個引數為列(rows),第二個為欄(colunms),第三個為CvMat資料結構參數.
cvCreateMat(列數數據,行數數據,CvMat資料結構參數)
cvGetElemType()
回傳矩陣參數數據,這邊只能用CvMat矩陣資料結構,放置IplImage資料結構一定會錯誤,CvMat的參數是藉由公式換算的,因此會需要用到此函式.
cvGetElemType(CvMat資料結構)
cvGetRows()
取得一整串列的矩陣輸入值可為IplImage資料結構或CvMat資料結構,第一個引數則是IplImage,CvMat二擇一,第二個引數一定要放CvMat,再來的引數為開始列數據,開始行數據,此函數有同樣性質的函數類為
cvGetRow()
cvGetRows()
cvGetRow()則是取得單行的CvMat列數據,與cvGetRows()相同
cvGetRows(IplImage資料結構或CvMat資料結構,空的CvMat資料結構,開始列數Int型別,結束列數Int型別)
cvGetRow()
取得單行CvMat資料結構的列數據,第一個引數放IplImage或CvMat資料結構,第二個放空的CvMat第三個則是放取得行數.
cvGetRow(IplImage資料結構或CvMat資料結構,空的CvMat資料結構,取得列數數據)
cvGetCols()
取得一整串欄的輸入值,第一個引數的輸入值可為IplImage資料結構或CvMat資料結構,第二個引數一定要放空的CvMat資料結構,第三個引數放開始欄數,第四個引數放結束欄數,此函數也有同樣性質的函數類為
cvGetCol()
cvGetCols()
cvGetCol()則是取得單行的CvMat欄數據,與cvGetCols()相似
cvGetCols(IplImage資料結構或CvMat資料結構,空的CvMat資料結構,開始欄數Int型別,結束欄數Int型別)
cvGetCol()
取得單行CvMat資料結構的欄據,第一個引數放IplImage或CvMat資料結構,第二個放空的CvMat第三個則是放取得欄的數據.
cvGetRow(IplImage資料結構或CvMat資料結構,空的CvMat資料結構,取得欄數數據)
1 意見:
2.0版的opencv,cvCreateMat似乎不會幫你做初始化的動作,只是單純的配置空間而已
張貼留言