与 原文 过程有些不同,根据具体环境自行配置即可!

转自于:http://blog.csdn.net/left_la/article/details/8206645

我的计算机环境是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;

二、所用到的基本读取写入mat文件代码示例:

首先需要包含头文件:

#include <mat.h>

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);
Matrix<double> A(M,N);
for (int i=0; i<M; i++)
for (int j=0; j<N; j++)
A[i][j] = initA[M*j+i]; matClose(pmatFile);
mxFree(initA); // 生成.mat文件
double *outA = new double[M*N];
for (int i=0; i<M; i++)
for (int j=0; j<N; j++)
outA[M*j+i] = A[i][j];
pmatFile = matOpen("A.mat","w");
pMxArray = mxCreateDoubleMatrix(M, N, mxREAL);
mxSetData(pMxArray, outA);
matPutVariable(pmatFile, "A", pMxArray);
matClose(pmatFile);

三、程序说明

1.使用matOpen函数打开mat文件

MATFile *matOpen(const char *filename,const char *mode)

mode:

r:以只读方式打开

u:更新模式,可读可写,但是如果要打开的数据文件不存在,也不会创建新的文件

w:以写入方式打开,只能写如入,如果要打开的数据文件不存在,则创建一个新的文件

2.使用matGetVariable函数读取mat文件中的变量

mxArray * matGetVariable(MATFile * pMF, const char * name);

读取名为name的变量,返回一个数据阵列指针

3.使用mxGetData函数获取数据阵列中的数据

void *mxGetData(const mxArray *pa );

返回时需要使用强制类型转换。

4.使用mxGetM和mxGetN函数获取数据阵列矩阵的维数

size_t mxGetM(const mxArray *pa);

size_t mxGetN(const mxArray *pa);

5.使用mxCreateDoubleMatrix函数创建数据阵列为双浮点数矩阵

mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity flag);

6.使用mxSetData函数将变量存入数据阵列

void mxSetData( mxArray *pa, void  *newdata );

7.使用matPutVariable函数将数据阵列存入到mat文件中

int matPutVariable(MATFile * pMF, const char * name, const mxArray * pA);

存入成功返回0,存入出错返回非0

8.由于malab中矩阵的存储是按列存储,与c中不同,所以从mat文件中获取的矩阵需要重新排列。生成mat文件时,同样要注意。

9.完成mat文件操作后需要调用matClose函数关闭文件,并使用mxFree释放内存

C++的Matlab接口的更多相关文章

  1. caffe 在window下编译(windows7, cuda8.0,matlab接口编译)

    1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013 (ps:老板说服务器要装windows系统,没办法,又要折腾一番,在VS下编译好像在cuda8. ...

  2. caffe在windows 下的配置及matlab接口编译(无GPU)

    本人机子windows 10,matlab2015a,vs2013(官网使用的是vs2013) 1.首先去github上下载caffe的windows包,地址:https://github.com/B ...

  3. 【caffe-windows】 caffe-master 之 matlab接口配置

    平台环境: win10 64位 caffe-master  vs2013 Matlab2016a 第一步: 打开\caffe-master\windows下的CommonSettings.props文 ...

  4. C语言与MATLAB接口 编程与实例 李传军编着

    罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ************ ...

  5. 学习笔记之 初试Caffe,Matlab接口提取feature

    Caffe 提供了matlab接口,可以用于提取图像的feature.

  6. LibLinear(SVM包)使用说明之(二)MATLAB接口

    LibLinear(SVM包)使用说明之(二)MATLAB接口 LibLinear(SVM包)使用说明之(二)MATLAB接口 zouxy09@qq.com http://blog.csdn.net/ ...

  7. ubuntu下 编译Caffe的Matlab接口

    一般情况下不愿意使用Caffe的Matlab接口,总觉得Linux版的Matlab很难配置,但是现在搞目标检测,得到的源码是使用的Caffe的Matlab接口,只能硬着头皮上了. (1)修改caffe ...

  8. caffe的Matlab接口安装

    参考博文:http://blog.csdn.net/thystar/article/details/50720691 0. Caffe安装及Matlab安装 1. Caffe中matcaffe配置 c ...

  9. 激光相机数据融合(4)--KITTI数据集中matlab接口说明及扩展

    KITTI数据集接口已经提供了matlab接口,本篇将说明详细说明其应用并与PCL进行对接.PCL为C++点云处理语言库,详情可见:http://pointclouds.org/ 程序可以从官网下载, ...

  10. win7下编译Microsoft版的caffe包的MATLAB接口(CPU模式)

    本博客是基于http://www.cnblogs.com/njust-ycc/p/5776286.html这篇博客修改的,做出了更正与补充. 本人机器的环境:Win7+MATLAB2014b+VS20 ...

随机推荐

  1. eas之设置单元格可编辑

    for(int i=0;i<kdtEntrys.getRowCount();i++){    kdtEntrys.getRow(i).getCell("orgUnit").g ...

  2. 洛谷P1090 合并果子【贪心】

    在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所 ...

  3. CodeVS 1013&1029

    若干二叉树遍历的数据结构题. Problem 1013 传送门:http://codevs.cn/problem/1013/ 本题是一个数据结构——二叉树遍历问题. 对二叉树,给定中序遍历序列(In- ...

  4. mysql如何删除数据库指定ID段的数据库。比如删除id 1-500的数据。

    delete from tablename where id>=1 and id<=500或者DELETE FROM `数据库名称`.`数据表名称` WHERE `house_cs`.`i ...

  5. cxgrid的过滤%x%问题【备查】

    把这个文件复制到你的程序目录\DevExpress VCL\ExpressDataController\Sources\cxLike.pas function LikeStr(const AStr,  ...

  6. hdu 2897简单博弈

    #include<stdio.h> int main() {     int n,p,q,k;    while(scanf("%d%d%d",&n,& ...

  7. Git .gitignore文件忽略

    Git .gitignore文件忽略 学习了:http://blog.csdn.net/yonnangel/article/details/50115059 http://www.cnblogs.co ...

  8. UVA11234 Expressions

    题目的意思实在是读不懂,又是把栈变成队列什么的.. 只是大体的意思就是把后缀表达式变一下.. 抛开意思,事实上就是依据输入建个树,然后倒序输出.. 拿第一个例子说明:大写代表操作符(+ - × /之类 ...

  9. luogu1896 [SCOI2005]互不侵犯 状压DP

    题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.( 1 <=N <=9, 0 ...

  10. bzoj2958: 序列染色(DP)

    2958: 序列染色 题目:传送门 题解: 大难题啊(还是我太菜了) %一发大佬QTT 代码: #include<cstdio> #include<cstring> #incl ...