專案需要將matlab**寫成c++,準備用opencv。opencv中矩陣的儲存與matlab有所不同,應注意以下問題:
1、matlab中矩陣是按照列優先儲存的。對於n0*n1*...*nn維的矩陣,具體儲存方式是:(a0(0),a1(0),...,an(0)),(a0(1),a1(0),...an(0)), (a0(n0),a1(0),...an(0)),(a0(0),a1(1),a2(0),...an(0)),...(a0(0),a1(0),...,an(nn)).即先遍歷a0,再遍歷a1,a2,...,an.
2、opencv中矩陣的儲存方式是行優先的,與matlab相反。
3、對於三維矩陣,在opencv中我常使用乙個多通道的二維矩陣代替。如建立乙個100*10*20的矩陣:
mat a(100,10,cv_32sc(20));
也可以直接建立乙個三維矩陣:
int sz=;
mat a(sz,cv_32s);
4、對於遍歷矩陣的操作,盡量使矩陣元素在記憶體中連續。我常使用下面的方法遍歷矩陣:
double *data=(double *)a.data;
for(int i=0;ifor(int j=0;j*(data++)=........}}
5、矩陣的初始化
opencv新建乙個矩陣後並不會自動初始化,如果需要初始化需要自行操作。opencv提供了setto函式:
//初始化乙個32通道的矩陣,第32通道初始化為1,其他通道初始化為0
mat a(100,100,cv_32sc(32));
vecval;
val=0;
val[31]=1;
a.setto(val);
C 與Matlab混合程式設計之 矩陣資料結構
專案需要將matlab 寫成c 準備用opencv。opencv中矩陣的儲存與matlab有所不同,應注意以下問題 1 matlab中矩陣是按照列優先儲存的。對於n0 n1 nn維的矩陣,具體儲存方式是 a0 0 a1 0 an 0 a0 1 a1 0 an 0 a0 n0 a1 0 an 0 a0...
c 與matlab混合程式設計
實驗平台 matlab r2016b vs2013 思路 1.設定matlab的編譯器,使用外部的vc或者gcc等編譯器。2.編譯m檔案成dll 3.設定vs的include路徑和lib鏈結庫的路徑 4.編寫c 呼叫dll 步驟 1.設定matlab的編譯器 在命令列視窗下,輸入並執行如下命令 me...
C 與matlab混合程式設計
環境 vs2010 matlab2010 首先,編寫乙個函式集的.m檔案。函式名稱 class netbuilder func 1 function y class netbuilder func f 2 t linspace 0,1,400 3 y sin 2 pi f t 4plot t,y 5...