vs2013调用matlab作图,vs2013调用matlab函数

法一(常用方法):使用engine。

1、添加matlab环境:

在vs2013中vc-directory中添加matlab的excutable 、include、library的directory

Include:

E:\matlab2014\extern\include

Library:

E:\matlab2014\extern\lib\win64\microsoft

然后再linker的input中添加依赖项:

mclmcr.lib

mclmcrrt.lib

mclbase.lib

mclcommain.lib

libmex.lib

libmx.lib

libmat.lib

libeng.lib

然后再在系统环境变量中添加:

E:\matlab2014\bin\win64

ps:注意选择平台,是64位还是32位要对应,不然报错。

2、然后使用

Engine *ep;

if(!(ep = engOpen("")))

{

cout << "ERROR";

}

打开engine,下面主要介绍如何将参数传进去(主要是c++中的类):

mxCreateStructMatrix函数:

mxArray *mxCreateStructMatrix(mwSize m, mwSize n, int nfields,

const char **fieldnames);

m为要建立的结构体的个数,n为结构体的每个成员变量的数组数(这个一般就是1!!!若是2则会出现现params.xxx有2个cell),nfields为成员变量的个数,fieldnames为成员变量名):

mxSetField()函数:

void mxSetField(mxArray *array_ptr, int index,

const char *field_name, mxArray *value);

array_ptr为struct指针,index为数组索引,即上面说的那个n,在create的时候如果设置为1表示此成员在此struct里面就一个,故set的时候index = 0(c++从0开始索引).

const char* fields[] = { "padding", "output_sigma_factor", "sigma", "lambda", "learning_rate", "compression_learning_rate", "non_compressed_features", "compressed_features", "num_compressed_dim", "w2c", "pos","z_npca", "z_pca", "alphaf_num", "alphaf_den", "old_cov_matrix", "projection_matrix", "positions", "max_response","im","target_sz","sz"};

mxArray *params = mxCreateStructMatrix(1,1,22, fields);

mxSetField(params, 0, "padding", mxCreateDoubleScalar(1.0));

mxSetField(params, 0, "output_sigma_factor", mxCreateDoubleScalar(1.0 / 16));

mxSetField(params, 0, "sigma", mxCreateDoubleScalar(0.2));

mxSetField(params, 0, "lambda", mxCreateDoubleScalar(1e-2));

mxSetField(params, 0, "learning_rate", mxCreateDoubleScalar(0.075));

mxSetField(params, 0, "compression_learning_rate", mxCreateDoubleScalar(0.15));

mxSetField(params, 0, "non_compressed_features", mxCreateString("gray"));

mxSetField(params, 0, "compressed_features", mxCreateString("cn"));

mxSetField(params, 0, "num_compressed_dim", mxCreateDoubleScalar(2));

mxSetField(params, 0, "w2c", pMxArray);

.......

法二:建立c++ shared library

此方法老是出现问题在调试的时候竟然是opencv的函数出了问题。。。。。

步骤:

1.matlab命令行输入deploytool

2.选择Library Compiler

3.建立compiler

777b326b7be88e6eb6198498794c4fce.png

4.此过程大概会有好几分钟到几十分钟,然后得到如下几个文件:

a240a51e85927c52799d68f06359a676.png

在for_testing或者for_redistribution_files_only里找到下面3个文件:

860bf552dd2708cdbcde302c66a69725.png

这3个文件事实上就是自己的库了,然后照添加库的操作把其添加到自己的环境中即可。我的方法:将dll文件拖入c:\system32中(或者通过动态链接库来做,不过c++做这个比较麻烦,直接拖最快),.lib的文件路径直接加到vc directory中,然后.h文件加入工程。

5调用的时候需要初始化,并且任何根matlab数据结构有关的操作都应该是在….之中,否则会报错,无法初始化:

mclInitializeApplication(NULL, 0);

xxxxInitialize();

....

xxxxTerminate();

mclTerminateApplication();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值