如何让opencv成为MATLAB中的一个工具箱
来源:互联网 发布:json remove key 编辑:程序博客网 时间:2024/05/01 21:15
如何让opencv成为MATLAB中的一个工具箱
前言
谈到图像处理的编程工具,MATLAB和opencv是最经常提到的,两者各有优缺点,比如,MATLAB的数据可视化做得很好,而且还有其它可以方便调用的工具箱,但是在图像的处理上面,不如opencv中的函数完备,使用opencv的库,数据可视化不好。如何将两者结合起来,那么编程效率肯定会大大提高。本文介绍如何将opencv中实现的函数变成MATLAB中可以调用的类似脚本一样的文件。其关键是利用的MATLAB提供的mex编译工具。
目录
- 如何让opencv成为MATLAB中的一个工具箱
- 前言
- 目录
- 关于mex文件
- 下载mexopencv
- 编译安装
关于mex文件
MEX文件是一种可在matlab环境中调用的C(或fortran)语言衍生程序,MEX文件的后缀名按32位/64位分别为 .mexw32/.mexw64。MEX文件是由C或Fortran语言编写的源代码,经matlab编译器处理而生成的二进制文件。它是可以被matlab解释器自动装载并执行的动态链接程序,类似windows下的dll文件。
MEX文件实现了一种其它语言与MATLAB的接口,通过MEX文件可以在MATLAB中像调用内嵌函数一样调用使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能提高MATLAB环境中数据处理的效率。
利用MATLAB自带的mex编译工具编译一个c程序的例子:
#include "mex.h"//编写mex输出函数void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){ double* pin1, *pin2, *pout; int m,n; pin1 = mxGetPr(prhs[0]); pin2 = mxGetPr(prhs[1]); m = mxGetM(prhs[0]); n = mxGetN(prhs[0]); plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); pout = mxGetPr(plhs[0]); printf("test mex\n"); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { *(pout+n*i+j) = *(pin1+n*i+j) + *(pin1+n*i+j); } }}
在MATLAB中编译:mex test_mex.c
完成后,test_mex就相当于MATLAB中的的函数,可以直接调用。
说明:
mex文件的编写格式:
#include "mex.h"void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){}
nlhs 是输出参数个数
plhs 是输出参数指针
nrhs 是输入参数个数
prhs 是输入参数指针
操作输入数据:
mxGetPr 得到数据的指针地址
mxGetM 和 mxGetN 得到矩阵数据的行和列 (返回整数)
对于实矩阵,我们可以定义 double *M; 来对实矩阵数据操作。
double *M;int m,n;M = mxGetPr(prhs[0]); //指针指向第一个参数的数据地址m = mxGetM(prhs[0]);n = mxGetN(prhs[0]);
操作输出数据:
对于输出数据,需要首先用专门的mex函数分配内存空间,
plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); //生成m x n 的实矩阵
同输入数据一样,要对输出数据操作,我们也需要一个指向数据的指针变量,
double *A;A = mxGetPr(plhs[0]);
注意:MATLAB矩阵数据的存储顺序是”从上到下,从左到右”的,这点和Fortran是一样的。也就是说对于MATLAB的m x n的矩阵A。 A(1,1) 就是 M,A(2,1) 就是 (M+1) ,以此类推,A(i,j) 就是 *(M + m(j-1) + (i-1))
利用MATLAB自带的mex编译工具,有所限制,在源程序中只能调用一些C的标准库,不能调用opencv的库。在github上有人已经开发了一个mex工具包,提供了部分opencv库向MATLAB的转换的mex文件,我们可以下载我编译,还可以自己编写mexFunction并利用工具包中的mex编译工具添加相应的函数。
下面介绍安装的步骤。
下载mexopencv
在github上选择相应的版本下载,下载地址
下载后解压。
编译安装
文件中的readme.md文件有详细的安装教程,针对不同的平台(Linux、windows)
在windows下的安装步骤(在这之前先安装好opencv哦):
配置mex工具
打开MATLAB,在命令行中输入:
mex -setup
编译
将MATLAB的工作目录切换至下载文件的根目录,
mexopencv.make('opencv_path', 'C:\OpenCV\build')
注意:以上的opencv的目录要根据自己情况而定。下面是较为漫长的编译过程,之后我们就可以在MATLAB调用opencv的相应的函数,比如cv.findContours()
生成帮助文档
addpath('utils');MDoc;
- 如何让opencv成为MATLAB中的一个工具箱
- 如何安装matlab工具箱
- 如何安装MATLAB工具箱
- Matlab:如何添加工具箱
- Matlab中的符号工具箱
- 如何让一个应用程序成为服务运行
- 如何让一个Service成为前置进程?
- 如何让成为一个C/C++程序员
- 如何安装MATLAB工具箱-总结
- Matlab中如何添加工具箱
- 如何安装MATLAB工具箱-总结
- 如何让一个打开的文档成为活动文档
- 如何让一个打开的文档成为活动文档
- 如何让一个打开的文档成为活动文档
- 如何让你成为一个专业的程序员(一)
- 如何让你的网络平台成为一个巨大磁场
- 如何让你的网站成为google搜索中的焦点
- 如何让img设置成为div中的背景图片
- CapsNet
- Font Awesome(六)
- hrbust 2354 An Easy Geometry Problem
- 分治---线性时间选择
- retrain tensorflow中InceptionV3模型
- 如何让opencv成为MATLAB中的一个工具箱
- 重识java11
- python-基础知识-20171219
- Gainlo 面试指南 翻译完成
- 嵌入式名词以及简略说明
- 【Luogu2711】小行星(网络流,最大流)
- 最大值的选取
- Even Parity UVA
- 数据结构-树