讀取mat文件配置的環(huán)境
我的計算機環(huán)境是win7 64位系統(tǒng),VS2010跌捆,matlab R2010b。
工程配置:
1.C/C++->常規(guī)->附加包含目錄 添加:(兩個都要加)
MATLAB\R2010b\extern\include
MATLAB\R2010b\extern\include\win64
2.鏈接器->常規(guī)->附加庫目錄 添加:(兩個都要加)
MATLAB\R2010b\extern\lib\win64\microsoft
MATLAB\R2010b\extern\lib\win32\microsoft
3.鏈接器->輸入->附加依賴庫 添加:
libmat.lib
libmx.lib
libmex.lib
libeng.lib
由于所安裝的matlab為64位胆描,要調(diào)用其函數(shù),需要將工程轉(zhuǎn)換為X64
4.頂菜單->生成->配置管理器->平臺:X64
5.鏈接器->高級->目標計算機:
MachineX64(/MACHINE:X64)
6.計算機環(huán)境變量->path 添加:
E:\DevTools\MATLAB\R2010b\extern\lib\win64\microsoft;
E:\DevTools\MATLAB\R2010b\bin\win64;
讀取文件的基本操作
MATFile *pmatFile = NULL;
mxArray *pMxArray = NULL;
// 讀取.mat文件(例:mat文件名為"initUrban.mat"指煎,其中包含"initA")
double *initA;
pmatFile = matOpen("initUrban.mat","r");
pMxArray = matGetVariable(pmatFile, "initA");
initA = (double*) mxGetData(pMxArray);
M = mxGetM(pMxArray);
N = mxGetN(pMxArray);
//獲取元素,直接以1維向量
initA[M*j+i];
詳細說明參見:
C++讀寫.mat文件
讀取文件的注意事項
- matlab中的數(shù)據(jù)都是按列存儲的
無論在mat文件是幾維的數(shù)據(jù)便斥,讀出來都是1維向量至壤,需要自己讀取矩陣的維數(shù),然后按列一個一個讀出來 - matlab中的數(shù)據(jù)如果是uint8枢纠,讀出來都是錯的
一般數(shù)據(jù)都是double像街,但是如果你的數(shù)據(jù)恰好是uint8,那么從C++讀出來一定會非常奇怪晋渺,因為uint8是8位(1個字節(jié))镰绎,但是讀取的時候是多個字節(jié)。
解決方案:
#define BYTE unsigned char BYTE *initA; initA = (BYTE*)mxGetData(pMxArray); (int)initA[0]//最后使用的時候轉(zhuǎn)換成int