读取mat文件配置的环境
我的计算机环境是win7 64位系统,VS2010,matlab R2010b。
工程配置:
1.C/C++->常规->附加包含目录 添加:(两个都要加)
MATLAB\R2010b\extern\include
MATLAB\R2010b\extern\include\win64
2.链接器->常规->附加库目录 添加:(两个都要加)
MATLAB\R2010b\extern\lib\win64\microsoft
MATLAB\R2010b\extern\lib\win32\microsoft
3.链接器->输入->附加依赖库 添加:
libmat.lib
libmx.lib
libmex.lib
libeng.lib
由于所安装的matlab为64位,要调用其函数,需要将工程转换为X64
4.顶菜单->生成->配置管理器->平台:X64
5.链接器->高级->目标计算机:
MachineX64(/MACHINE:X64)
6.计算机环境变量->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中的数据都是按列存储的
无论在mat文件是几维的数据,读出来都是1维向量,需要自己读取矩阵的维数,然后按列一个一个读出来 - matlab中的数据如果是uint8,读出来都是错的
一般数据都是double,但是如果你的数据恰好是uint8,那么从C++读出来一定会非常奇怪,因为uint8是8位(1个字节),但是读取的时候是多个字节。
解决方案:
#define BYTE unsigned char BYTE *initA; initA = (BYTE*)mxGetData(pMxArray); (int)initA[0]//最后使用的时候转换成int