平台:win10 x64+VS 2015+Matlab R2018b+opencv_python-3.4.1+mexopencv3.4.1
问题来源:最近在做图像拼接的论文, 在opencv中有很多现成实现追踪的函数,想用那些函数来进行一个调试,由于MATLAB有更加强大的矩阵库,众多的工具箱,以及更加便捷的可视化及调试工具,所以打算在MATLAB中调用opencv库中的函数,在此记录一下配置的过程。
mexopencv用于OpenCV库的matlab mex函数的集合和开发工具包。mexopencv是针对特定的OpenCV版本开发的,所以必须使用对应的opencv和mexopencv版本。在此将介绍在MATLAB上配置OpenCV3.4.1和mexopencv的过程。
1.mexopencv简介
(1)mexopencv将大多数opencv中常用的接口集合成Matlab工具,在Matlab中可以随意的调用。
(2)mexopencv官网的教程说的比较繁杂,琢磨了一晚上后发现其实配置过程就是很简单的几步。
(3)上边连接是最新版的,也就是opencv3.x。当然你也可以配置opencv2.4.X,
2.下载配置opencv
(1)下载opencv,点击打开链接,根据自己的需求决定下载3.X还是2.4.x,这一步在我博客也有:https://www.cnblogs.com/Alliswell-WP/p/opencv3OfcontribAdd.html
(2)下载成功后会得到opencv.exe文件,双击解压到合适的位置,我的为:D:\ProgramFiles\OpenCV3.4.1_x64
(3)编辑系统环境变量Path,根据自己的编译器和操作系统决定,如:D:\OpenCV\build\x86\vc10\bin 为32位操作系统,VS2010编译器
注:32位操作系统为x86,64为操作系统为x64,Matlab的位数最好与操作系统一致。我的为:D:\ProgramFiles\OpenCV3.4.1_x64\opencv\build\x64\vc14\bin
vc10--vs2010 vc11--vs2012 vc12--vs2013 vc14--vs2015
opencv3.X只支持64位,编译器为vs2013及以上版本
3.下载mexopencv
(1)如果您的opencv是3.X,在这里下载:https://github.com/kyamagu/mexopencv
(2)如果您的opencv是2.4.x,在这里下载:https://github.com/kyamagu/mexopencv/tree/v2.4
(3)下载之后将压缩包解压到合适位置,我的为:D:\Working\Matlab\mexopencv-master
4. 在Matlab中配置mexopencv
(1)Matlab中设置mexopencv路径:将mexopencv的所有文件夹极其子文件夹(我的是:D:\Working\Matlab\mexopencv-master)添加到工作目录。
(2)设置编译器:在MATLAB的命令行中输入>>mex -setup ,后点击“mex -setup C++”
(3)很关键的一步,我们需要修改mexopencv里的一些参数,不然会报错
首先需要将mexopencv3_4_1\+mexopencv目录下的make.m文件中的opts.opencv_path参数设置为OpenCV原先解压的路径,例如我这里是“D:\ProgramFiles\OpenCV3.4.1_x64\opencv\build”:opts.opencv_path = 'D:\ProgramFiles\OpenCV3.4.1_x64\opencv\build'; % OpenCV location
再然后将其中的一些代码注释掉,不然可能会报 -R2017b这样的错误(275-281行):
real/imaginary storage format for complex arrays
if ~mexopencv.isOctave() && ~verLessThan('matlab', '9.4')
% keep using the "separate complex storage", as opposed to the
% "interleaved complex storage" introduced in R2018a
% (see MX_HAS_INTERLEAVED_COMPLEX)
mex_flags = ['-R2017b' mex_flags];
end
注释后:
% real/imaginary storage format for complex arrays
% if ~mexopencv.isOctave() && ~verLessThan('matlab', '9.4')
% % keep using the "separate complex storage", as opposed to the
% % "interleaved complex storage" introduced in R2018a
% % (see MX_HAS_INTERLEAVED_COMPLEX)
% mex_flags = ['-R2017b' mex_flags];
% end
(4)编译opencv,在MATLAB的命令行中输入>> mexopencv.make
(5)耐心等待,编译成功后测试一下
addpath('test');
UnitTest;
如果全部显示“”PASS"则代表配置成功。
参考链接:1)Matlab和OpenCv的混合编程,工具箱mexopencv——https://blog.csdn.net/luchengtao11/article/details/52179595