matlab与C混编并链接opencv库

本文介绍了如何在MATLAB中通过mex功能与C++混合编程,以便调用已经基于OpenCV库编写的C代码。首先设置MATLAB的mex编译器,然后将C代码修改为mex接口,接着编译C++文件,特别关注了链接OpenCV库的步骤。最后展示了在MATLAB中调用编译好的mex文件进行图像处理的例子。
摘要由CSDN通过智能技术生成

最近在使用matlab的mex功能与C++进行混合编程,目的是在matlab里调用C++,起到加速的作用。而我之前写好的C代码是基于opencv库的,因此还需要调用opencv的库,因此在使用mex编译C代码的时候还需要链接到opencv库,下面我具体描述使用过程。

 

第一步、设置matlab 的mex编译器

打开matlab,在command window里输入mex –setup,按照提示选择对应的C++编译器。

我电脑上安装的是vs2013,因此配置其为编译器。(对应vc12)

 

第二步、修改C代码为mex接口

一般包括:

1)添加头文件mex.h

#include"mex.h"

2)添加接口函数mexFunction()

mexFunction的定义为:

void mexFunction(int nlhs, mxArray*plhs[],int nrhs, const mxArray *prhs[]){

}

 

这个接口函数的作用就是实现matlab与C++之间的数据转换,其中几个变量:

nlhs: number of left hand size parameters,也就是Matlab调用语句左边的变量个数,实际上就是需要返回给Matlab的返回值变量有多少个。

 

plhs: pointer of left hand size parameters,也就是函数返回参数的指针。但它是一个指针数组。换句话说,它是一个数组,每个元素是个指针,每个指针指向一个数据类型为mxArray的返回参数。

 

nrhs: number of right hand size parameters,也就是Matlab调用语句右边的变量个数。

 

prhs: pointer of right hand size parameters,和plhs类似,是matlab右变量的指针数组,注意prhs是const的指针数组,即不能改变其指向内容。

 

总结一下,就是nrhs和prhs代表的是输入参数的个数与变量指针,nlhs和plhs代表的是输出参数的个数与指针。

 

有了传递方法,如何得到函数内指针对应的值呢?这就需要利用mex.h里一系列专用的函数了,可以参考《精通Matlab与C C++混合程序设计第2版》第三章的内容或者是math work上的官方文档。这里说明几个常用的函数:

 

mxGetN Number of columns in array  得到矩阵列数

mxSetN  Set number of columns in array     得到矩阵行数

 

mxGetScala

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值