研究计算机视觉的同学们对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。
2. 第二步在Matlab的Mex配置文件中添加OpenCV库支持,这一步类似于在VS2010的项目属性中设置OpenCV的相关信息。
在Matlab的命令行中输入 mex -v,找到mexopts.bat文件所在的位置,用记事本或其他程序打开。
修改如下地方:
这样在matlab中的OpenCV已经配置好了。
3. 新建useOpenCV.cpp文件,代码如下:
#include"mex.h"4. 在matlab里面输入mex useOpenCV.cpp编译,会生成一个名为useOpenCV.mexw64的文件(类似于windows中的dll文件)。
#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;
}
5. 在matlab里输入调用语句,useOpenCV('test.jpg');即可显示我们输入的图像。
以上内容参考了,http://blog.csdn.net/sxjk1987/article/details/8783016及http://blog.csdn.net/raodotcong/article/details/8785358两篇博文。