做實驗需要將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 紅色...