下面我们将介绍Mexopencv的使用。
首先介绍几个常用的帮助链接:
- MATLAB File Help: cv :这里列出了cv里的全部函数
- OpenCV 2.3.2 documentation :这里可以搜索到opencv的函数
- mexopencv Github主页
- mexopencv主页
- mex interface for opencv library
添加Mexopencv的路径
方法一:在matlab中找到Set Path选项,添加mexopencv路径;
方法二:addpath(‘/path to mexopencv’);如我的路径为:addpath('D:/Program Files/mexopencv-2.4');
命名符的使用
在程序中,我们既可以使用带有cv.*的函数,也可以先载入包名,然后直接使用函数,就像C++一样。如:
1 | img = imread('1.jpg'); |
注意:一些函数如cv.imread 重载了MATLAB中的内建函数。如果你想避免命名冲突,可以使用作用域名字,即使用cv.*。
帮助
在Matlab可以通help command查找相关函数列表。
1 | >> help cv; % shows list of functions in package 'cv' |
mexopencv里面包含了一个简实用文档,可以生成MATLAB的HTML帮助文件。如下命令可以在doc/matlab/下生成用户手册。
首先设置matlab当前目录为 D:\Program Files\mexopencv-2.4
然后键入:
1 | addpath('utils'); |
你可以运行由test路径下的UnitTest类生成的测试函数。里面包含了mexopencv支持的各种函数功能,一旦出现PASS,说明此功能正常,可以使用。
1 | addpath('test'); |
执行完后,出现如下结果:
1 | == TestANN_MLP ====== |
举例说明
查看samples/文件夹,发现里面共有五个文件,均是mexopencv的具体应用。下面我们将具体讲解其中的三个例子。
以下示例均需先加入mexopencv的路径到matlab的path中,并且将samples/加入路径,用代码表达为:
1 | addpath('D:/Program Files/mexopencv-2.4');%载入Mexopencv路径 |
SURF_detector.m
用于显示图片特征点
1 | function SURF_detector |
运行 SURF_detector,即可出现特征点图。如下:
SURF_descriptor.m
用于计算特征点的特征向量(或者叫特征描述子)
1 | function SURF_descriptor |
运行SURF_descriptor,即可出线下图:
facedetect.m
1 | function facedetect |
运行facedetect,即可出线人脸框,可以进行人脸识别.
如图:
发展一个新的 MEX 函数
你所需要做的就是在src/+cv/增加你的MEX源文件。如果你想要增加一个叫myfunc的MEX文件,创建src/+cv/myfunc.cpp. myfunc.cpp将看起来如下:
1 | #include "mexopencv.hpp" |
这个例子简单地复制input到cv::Mat对象,然后再复制到输出对象。注意到MxArray转化为cv::Mat 对象是通过mexopencv来实现的。当然了你想要做更多的事情。一旦你创建好一个文件后,键入mexopencv.make去建立你的新函数。编译好的MEX函数将会出现在+cv/中,你可以在MATLAB中使用cv.myfunc来使用它。
mexopencv.hpp 头文件包含了一个类 MxArray 去操作 mxArray 对象. 大多数情况下这个被用来进行 OpenCV 数据类型和 mxArray的转化。
1 | int i = MxArray(prhs[0]).toInt(); |