使用VS2010呼叫matlab的mat格式檔案

2021-08-13 21:08:19 字數 2529 閱讀 8774

做實驗需要將matlab實現的meanshift的結果中的region的iabels矩陣,需要把labels.mat讀入vs2010中,實現功能,在此把實現過程記錄下來。

c++讀取mat檔案的步驟如下。

1. vs2010的配置

新建乙個工程,在屬性管理器中選擇 工程->屬性->vc++目錄。

設定包含目錄為:d:\matlab\r2010a\extern\include(我的matlab裝在d盤);

設定庫目錄為:d:\matlab\r2010a\extern\lib\win32\microsoft。

2.設定環境變數path

計算機->屬性->高階系統設定->高階->環境變數

在path中已經存在d:\matlab_2011a\r2011a\bin\,但是d:\matlab_2011a\r2011a\bin\win32下有個重要的libmat.dll。如果不把d:\matlab\r2010a\bin\改為d:\matlab_2011a\r2011a\bin\win32程式將無法執行。

理論上d:\matlab_2011a\r2011a\bin\應該會向深一步檢索到libmat.dll。坑爹的windows這一步並沒有去做。這步設定完後要重啟(環境配置完畢)。

3.使用matlab 提供的mat 檔案介面函式

在c/c++程式中有兩種方式可以讀取mat檔案資料。利用matlab提供的有關mat檔案的程式設計介面函式。matlab的庫函式中包含了mat檔案介面函式庫,其中有各種對mat檔案進行讀寫的函式,都是以mat開頭的函式。如表1所示。

表1  c語言中的mat檔案讀寫函式

mat  函  數                          功    能

matopen開啟 mat 檔案

matclose關閉 mat 檔案

matgetdir從 mat 檔案中獲得 matlab 陣列的列表

matgetfp獲得乙個指向mat 檔案的ansi c 檔案指標

matgetvariable從mat檔案中讀取matlab陣列

matputvariable寫matlab陣列到mat檔案

matgetnextvariable從mat檔案中讀取下乙個matlab陣列

matdeletevariable從mat檔案中刪去下乙個matlab陣列

matputvariableasglobal從matlab陣列寫入到mat檔案中

matgetvariableinfo從mat檔案中讀取matlab陣列頭資訊

matgetnextvariableinfo從mat檔案中讀取下乙個matlab陣列頭資訊

4.程式舉例

讀取.mat檔案,並把mat內容儲存在影象中並顯示。

注意:在studio中一定要注意,預設讀取.mat的方式是按列讀取,不是按行讀取。這是matlab資料儲存的特色!

#include "

stdafx.h

"int loadmat(mat®id)

dir = (const

char **)matgetdir(pmat, &ndir);

//ndir 表示mat檔案中含有矩陣數目

if (dir ==null)

else

pmat=matopen(file, "

r");//

重新開啟檔案;

pa = matgetnextvariable(pmat, &name);

//返回指向檔案標頭檔案資訊的指標,指標型別為*mxarray;

//name 是矩陣的名字;

cout

pmat=matopen(file, "r"

);

int ii=mxgetm(pa);//

矩陣行數400

int jj=mxgetn(pa);//

矩陣列數300

int *pm=(int*)mxgetpr(pa); //

獲取矩陣數值,返回指向矩陣第一數值的指標;

VS2010呼叫幫助文件

1 新增htmlhelp.h標頭檔案和htmlhelp.lib庫。在專案 屬性 聯結器 輸入的附加依賴項中加入htmlhelp.lib庫檔案,然後在聯結器 常規 附加庫目錄中加入htmlhelp.lib的目錄位置。然後再工程中加入標頭檔案 include htmlhelp.h 2 開始編寫程式。tc...

vs2010中靜態呼叫dll

在網上搜尋良久,關於靜態呼叫dll的方式講解的都不是很清楚。通過自己摸索,結合網上提供的一些方法,現在總結兩種靜態呼叫dll的方法。一 同一解決方案下面靜態呼叫dll 當我們建立了乙個dll的工程,此工程的預設輸出目錄是在 solutiondir configuration 而此解決方案中,生成.e...

C C static使用(基於VS2010)

一 在c語言中 靜態變數永遠只能初始化一次 執行時 但是可以多次賦值,靜態變數的記憶體位址在編譯後就確定了。1 區域性靜態變數,存在於全域性資料區 example1 include int function int main 輸出結果為11,12,13,14,15,16,17,18,19,20 紅色...