Matlab与C/C++混合编程之Matlab调用OpenCV库函数
2016-04-06 16:16
459 查看
研究计算机视觉的同学们对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。
![](http://img.blog.csdn.net/20160406160723552?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 第二步在Matlab的Mex配置文件中添加OpenCV库支持,这一步类似于在VS2010的项目属性中设置OpenCV的相关信息。
在Matlab的命令行中输入 mex -v,找到mexopts.bat文件所在的位置,用记事本或其他程序打开。
![](http://img.blog.csdn.net/20160406160637754?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
修改如下地方:
![](http://img.blog.csdn.net/20160406161045912?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这样在matlab中的OpenCV已经配置好了。
3. 新建useOpenCV.cpp文件,代码如下:
5. 在matlab里输入调用语句,useOpenCV('test.jpg');即可显示我们输入的图像。
以上内容参考了,http://blog.csdn.net/sxjk1987/article/details/8783016及http://blog.csdn.net/raodotcong/article/details/8785358两篇博文。
废话少说,下面介绍如何在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" #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两篇博文。
相关文章推荐
- 哈工大深研院数字图像处理第一次大作业:不调用Matlab函数实现图像增强
- MATLAB数据处理快速学习教程
- Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression
- 聚类算法KMeans和KMedoid 的Matlab实现
- 尝试将 SCRIPT ompbox\private\ompmex 作为函数执行: C:\Users\hss\Documents\MATLAB\AplusCodes_SR\ompbox\private\ompmex.m 出错 omp (line 163) gamma = ompmex(D,X,DtX,G,T,sparse_gamma,msgdelta,profile);
- Matlab的bsxfun函数
- MATLAB中的分类器
- GPU&VS2012&CUDA&matlab&Arrayfire杂记(三)——cuda
- GPU&VS2012&CUDA&matlab&Arrayfire杂记(二)——matlab
- restoredefaultpath matlab
- GPU&VS2012&CUDA&matlab&Arrayfire杂记(一)——序
- 【matlab】将matlab中数据输出保存为txt或dat格式
- 导出CCS3.3数据及使用matlab处理的方法
- Matlab将mat格式数据保存为txt格式
- matlab自带各种分类器的使用示例
- 用蒙特卡罗方法计算区域面积以matlab实现
- matlab编译为exe的一些问题
- MATLAB入门篇(一)——常用命令、路径管理、帮助
- matlab 单双精度引发的血案
- 一文搞懂Matlab画图那些事(上篇)