在MATLAB中使用OpenCV大体上分两个方法:
- 比较熟悉C : 使用Mex通过编译器编译所需要的所有C 功能都实现了的函数;
- 比较习惯MATLAB: 使用mexopencv直接把opencv整个库编译, 这样就可以在MATLAB中直接使用OpenCV函数.
我们来说说第二类,需要做的事情是先编译opencv的源码、再编译matlab可用的mex文件夹,这两步的编译器必须是同一个,而最近几年的新版本matlab都推荐使用MinGW-w64编译器来使用mex、可是mexopencv提供的编译辅助函数在Windows系统上默认使用Visual Studio或者Windows SDK来编译,如果觉得自己需要Visual Studio的其他功能,安装一下也是挺好的
下载安装vs2017后在matlab命令行输入mex -setup C 选择vs2017作为mex编译器
要是在Linux系统下matlab会自动选用gcc编译器、但是2017b之后的需要gcc6.3、这个版本在常见Linux发行版系统中是需要自行编译的(也可以注意观察https://pkgs.org/ 网站上有没有提供6.3版本的已经编译好的安装包)
经过各种尝试、发现使用Ubuntu16的LTS版本系统可以安装已经编译好的gcc4.9版本,我们使用虚拟机安装Ubuntu16
在 https://pkgs.org/download/gcc 下载gcc以及g 4.9的可以双击安装的deb包就可以安装(安装包在文末下载链接中)、安装之后运行下面几句命令行、将系统的编译器选择为4.9版本
删除原先的软链接
sudo rm /usr/bin/gcc
sudo rm /usr/bin/gcc-ar
sudo rm /usr/bin/gcc-nm
sudo rm /usr/bin/gcc-ranlib
sudo rm /usr/bin/g
设置新的软链接
sudo ln -s /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s /usr/bin/g -4.9 /usr/bin/g
接下来就是要编译opencv,mexopencv的wiki内写的是Windows系统需要这样做、通过实践发现在Linux系统下也是可以这么做的
在 https://cmake.org/ 官网下载cmake来准备编译opencv所需要的一切
下载opencv源码3.4.1
https://github.com/opencv/opencv/archive/3.4.1.zip
下载opencv_contrib源码3.4.1
https://github.com/opencv/opencv_contrib/archive/3.4.1.zip
解压这两个zip文件,双击打开刚刚安装的cmake
选择opencv源码比如 C:/dev/opencv
设置编译路径比如 C:/dev/build
点击Configure选择Visual Studio 2017作为编译器(如果是Ubuntu系统中就选择系统中的gcc编译器)
以下操作两个系统都一样、mac都一样
勾选分组一起显示的复选框、在"BUILD"组里面去掉以下几项(*号表示匹配任意字符):
BUILD_DOCS, BUILD_EXAMPLES, BUILD_PACKAGE, BUILD_PERF_TESTS, BUILD_TESTS, BUILD_JAVA
BUILD_opencv_apps, BUILD_opencv_cuda*, BUILD_opencv_cudev, BUILD_opencv_js, BUILD_opencv_java*, BUILD_opencv_python*, BUILD_opencv_ts, BUILD_opencv_viz, BUILD_opencv_world
在 "OPENCV"分组里面:
设置OPENCV_EXTRA_MODULES_PATH比如为C:/dev/opencv_contrib/modules
勾选OPENCV_ENABLE_NONFREE
在 "WITH" 分组, 去掉以下几项:
WITH_CUDA, WITH_CUFFT, WITH_CUBLAS, WITH_NVCUVID, WITH_MATLAB, WITH_VTK
再次点击Configure
等待一会儿"BUILD" 分组应该还是红色如果有以下几项被勾选的就去掉:
BUILD_opencv_cvv, BUILD_opencv_freetype, BUILD_opencv_hdf, BUILD_opencv_matlab, BUILD_opencv_ovis, BUILD_opencv_sfm
再次点击 Configure直到没有红色
点击Generate
关闭 CMake
接下来如果在Windows系统就按照https://github.com/kyamagu/mexopencv/wiki/Installation-(Windows,-MATLAB,-OpenCV-3)
采用vs2017编译opencv、再进入matlab中编译mex文件
我们这里采用Linux环境来开发,进入刚刚选择的编译路径,打开命令行
make -j8
或者
make -j4
后面的数字表示运行的线程、更大的就更快
然后再
sudo make install
稍等一会儿就好
然后进入mexopencv文件夹
sudo make all contrib MATLABDIR=/usr/local/MATLAB/R2017b
后面的路径要换成对应的
接下来打开matlab将mexopencv文件夹下的
C:pathtomexopencv C:pathtomexopencvopencv_contrib
添加到matlab搜索路径就可以使用了
推荐这样使用
out = cv.filter2D(img, kern);
运行一个demo就像下面这样
相关文件下载链接:
https://pan.baidu.com/s/1aL5-AyzHO4jBGhkaQdh6Mg
提取码:x4mq