C 與Matlab混合程式設計之 矩陣資料結構

2021-07-07 04:32:46 字數 836 閱讀 5159

專案需要將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...