在研究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])然而,注意在傳遞二維陣列的時候,第三種方法的侷限性在於必須要知道每一維度的元素個數,其實可以將二維陣列,例如a[2][3]的陣列名稱a直接轉換成乙個float指標傳遞進去,當成一位陣列使用。即,主程式:
int _tmain(int argc, _tchar* argv);
mat m0(3,3,cv_32f);
initmat(m0,m);
}
主程式:
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 語言的結構。使用這兩個結構的問題是記憶體需要手動管理,開發者必須清楚的知道何時需要申請記憶體,何時需要釋放記憶體。這個開發者帶來了一定的負擔,開發者應該將更多精力用於演算...