matlab与C混编并链接opencv库

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用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     得到矩阵行数

 

mxGetScalar  Real component of first data element in array   得到标量值

mxGetPr Re

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值