Mat矩陣的初始化

2021-07-12 07:12:03 字數 2875 閱讀 5204

在研究mat矩陣的初始化的時候,發現其不能像matx輕量級矩陣那樣,直接利用陣列來進行初始化,而是利用乙個內部的變數型別:scalar來進行初始化的。參考手冊中的建構函式如下所示:

(1) mat::mat()

(2) mat::mat(int rows, int cols, int type)

(3) mat::mat(size size, int type)

(4) mat::mat(int rows, int cols, int type, constscalar&s)

(5) mat::mat(size size, int type, constscalar&s)

(6) mat::mat(const mat& m)

(7) mat::mat(int rows, int cols, int type, void* data, size_t step=auto_step)

(8) mat::mat(size size, int type, void* data, size_t step=auto_step)

(9) mat::mat(const mat& m, const range& rowrange, const range& colrange)

(10) mat::mat(const mat& m, const rect& roi)

(11) mat::mat(const cvmat* m, bool copydata=false)

(12) mat::mat(const iplimage* img, bool copydata=false)

(13) templateexplicit mat::mat(const vec& vec, bool copydata=true)

(14) templateexplicit mat::mat(const matx& vec, bool copydata=true)

(15) templateexplicit mat::mat(const vector& vec, bool copydata=false)

(16) mat::mat(const matexpr& expr)

(17) mat::mat(int ndims, const int* sizes, int type)

(18) mat::mat(int ndims, const int* sizes, int type, constscalar&s)

(19) mat::mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0)

(20) mat::mat(const mat& m, const range* ranges)

似乎這樣的矩陣讓我們用起來感覺很不順手,不過接著往下讀參考手冊,你會發現這樣乙個例子:

mat h(100, 100, cv_64f);

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

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

h.at(i,j)=1./(i+j+1);

通過這個例子,我們嘗試來給mat型別初始化。

第一種改進:(直接由以上例子仿製而來)

//用乙個常數來初始化矩陣

void initmat(mat& m,float t)

主程式:

int _tmain(int argc, _tchar* argv)

第二種改進:

//用乙個一維陣列來初始化矩陣

void initmat(mat& m,float* num)

主程式:

int _tmain(int argc, _tchar* argv);

mat m0(3,3,cv_32f);

initmat(m0,m0);

}

第三種改進:

//希望利用二維陣列來初始化

void initmat(mat& m,float(*p)[3])

主程式:

int _tmain(int argc, _tchar* argv);

mat m0(3,3,cv_32f);

initmat(m0,m);

}

然而,注意在傳遞二維陣列的時候,第三種方法的侷限性在於必須要知道每一維度的元素個數,其實可以將二維陣列,例如a[2][3]的陣列名稱a直接轉換成乙個float指標傳遞進去,當成一位陣列使用。即,

主程式:

int _tmain(int argc, _tchar* argv);

mat m0(3,3,cv_32f);

initmat(m0,(float*)m);}

注: 陣列和指標在引數傳遞時的對應關係:

實參                     形參

陣列的陣列:               char a[8][10]     char(*p)[10]

指標的陣列:               char *a[10]        char **p

陣列指標(行指標): char(*a)[8]         char(a)[8]

指標的指標:               char **a            char**a

結果執行截圖如下:

附註:有關多維陣列的引數傳遞問題,詳細參見《c專家程式設計,page225》

Mat矩陣的初始化

在研究mat矩陣的初始化的時候,發現其不能像matx輕量級矩陣那樣,直接利用陣列來進行初始化,而是利用乙個內部的變數型別 scalar來進行初始化的。參考手冊中的建構函式如下所示 1 mat mat 2 mat mat int rows,int cols,int type 3 mat mat siz...

005 矩陣初始化 運算 特殊矩陣初始化

矩陣定義 m行 n列 import tensorflow as tf data1 tf.constant 6,6 data2 tf.constant 2 2 data3 tf.constant 3,3 data4 tf.constant 1,2 3,4 5,6 matmul tf.matmul da...

opencv之Mat類初始化

早期的 opencv 中,使用 iplimage 和 cvmat 資料結構來表示影象。iplimage 和 cvmat 都是 c 語言的結構。使用這兩個結構的問題是記憶體需要手動管理,開發者必須清楚的知道何時需要申請記憶體,何時需要釋放記憶體。這個開發者帶來了一定的負擔,開發者應該將更多精力用於演算...