在MATLAB中使用opencv

2019-10-09 16:11:44 浏览数 (1)

在MATLAB中使用OpenCV大体上分两个方法:

  1. 比较熟悉C : 使用Mex通过编译器编译所需要的所有C 功能都实现了的函数;
  2. 比较习惯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

0 人点赞