C++读取mat文件

读取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文件

读取文件的注意事项

  1. matlab中的数据都是按列存储的
    无论在mat文件是几维的数据,读出来都是1维向量,需要自己读取矩阵的维数,然后按列一个一个读出来
  2. matlab中的数据如果是uint8,读出来都是错的
    一般数据都是double,但是如果你的数据恰好是uint8,那么从C++读出来一定会非常奇怪,因为uint8是8位(1个字节),但是读取的时候是多个字节。
    解决方案:
    #define BYTE unsigned char BYTE *initA; initA = (BYTE*)mxGetData(pMxArray); (int)initA[0]//最后使用的时候转换成int
    原文作者:focustime
    原文地址: https://www.jianshu.com/p/b33723fcf217
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞