Matlab与C/C++混合编程之Matlab调用OpenCV库函数

时间:2022-09-22 09:12:13

研究计算机视觉的同学们对OpenCV和Matlab应该非常熟悉,OpenCV作为最大的计算机视觉开源库已经得到了非常广泛的使用,在视觉研究领域的地位不可动摇,其主要是基于C/C++实现的,主要的开发平台包括VS,Qt等等。Matlab以其在矩阵运算方面独有的优势在图像处理领域如鱼得水,Matlab的图像处理工具箱IPT已经集成了常见的图像处理函数,现在很多研究论文的代码都是基于用Matlab实现的。由于C\C++和Matlab在处理不同问题的时候各有千秋,如何将两者结合起来编程显得尤为重要,事实上,在计算机视觉研究领域,很多大牛的文章就是用C\C++和Matlab混合编程实现的,最后一般给的都是matlab的接口。


废话少说,下面介绍如何在Matlab中调用OpenCV的库函数,也方便日后查阅,进一步学习。

平台:Win7 64,Matlab R2012a 64,OpenCV 2.4.10,VS2010


默认以上软件均在计算机中安装好了,可以利用VS2010成功创建基于OpenCV的应用程序。下面是在Matlab中调用OpenCV库函数的详细步骤。

1. 首先是在Matlab中设置C\C++编译器,选择Mirosoft Visual C++ 2010。

Matlab与C/C++混合编程之Matlab调用OpenCV库函数

2. 第二步在Matlab的Mex配置文件中添加OpenCV库支持,这一步类似于在VS2010的项目属性中设置OpenCV的相关信息。

在Matlab的命令行中输入 mex -v,找到mexopts.bat文件所在的位置,用记事本或其他程序打开。

Matlab与C/C++混合编程之Matlab调用OpenCV库函数

修改如下地方:

Matlab与C/C++混合编程之Matlab调用OpenCV库函数

这样在matlab中的OpenCV已经配置好了。


3. 新建useOpenCV.cpp文件,代码如下:

#include"mex.h"

#include "cv.h"

#include "highgui.h"

void mexFunction (int nlhs, mxArray *plhs[], // 输出参数个数,及输出参数数组

int nrhs, const mxArray *prhs[]) // 输入参数个数,及输入参数数组

{

char name[256];

int buflens =mxGetNumberOfElements(prhs[0]);

mxGetString(prhs[0], name, buflens+1);

if(!mxIsChar(prhs[0]))

{

mexErrMsgTxt("First parameter must be string/n");

}

mexPrintf(name);

IplImage * img = cvLoadImage(name, 1);

if(img->imageData == NULL)

{

mexErrMsgTxt("Error in image/n");

}

cvNamedWindow("1",1);

//imshow("1",mat);

cvShowImage("1",img);

cvWaitKey(0);

return;

}
4. 在matlab里面输入mex useOpenCV.cpp编译,会生成一个名为useOpenCV.mexw64的文件(类似于windows中的dll文件)。

5. 在matlab里输入调用语句,useOpenCV('test.jpg');即可显示我们输入的图像。

以上内容参考了,http://blog.csdn.net/sxjk1987/article/details/8783016及http://blog.csdn.net/raodotcong/article/details/8785358两篇博文。