Matlab2016b:通过mex调用opencv

来源:互联网 发布:优酷mac缓存在哪里 编辑:程序博客网 时间:2024/06/05 18:51

想用matlab做交通标识识别,环境配置过程中,参考了一些博文,但是其实还是蛮费时间。

这里总结和记录一下过程中所遇到的问题以及解决办法,希望对大家有帮助。


OS:Win7 64bit

Opencv version: 2.4.13

matlab: 2016b

compiler: VS2012


1. 首先安装VS2012(或者其他版本),用为在matlab中c/c++的编译环境

然后是下载安装opencv以及环境变量的配置。

(关于Visual Studio,Matlab,以及Opencv的安装和配置已有许多博文有详尽的介绍,这里不再赘述)


2. 用mex -setup 查看c/c++的编译环境

mex相当于一个接口,就是将相应的c/c++程序通过mex接口,可以在matlab上跑。换句话说,此时的c/c++程序通过mex变成了matab function

具体可以在命令行输入 help mex 以查看帮助文档。

 

在命令行中输入:

mex -setup

如果你的环境安装配置成功 (因为安装的时候的路径为默认路径,所以不会有太大的问题,如果没有出现以上的情况,可能是matlab找不到VS相应的编译环境的路径),会显示为如下图:




3. 配置opencv的路径(path),库文件(lib),包含目录(include)

因为matlab2016b是当前(截止于写文章的时间)最新的一个版本,所以相关配置文件的修改和旧的版本不太一样。

之前看一些博文,2014a之前的options file 都是mexopt.bat,而2014a之后的配置文件都变成了相应的xml文件。

有看到一些文章说是修改mex_C_win64.xml文件,这个文件的目录一般是:

但是修改了半天,还是出现下图的错误提示:


所以应该要修改的不是这个文件,得找到要修改的文件。


解决办法如下:

首先编写一个简单的opencv的cpp文件,保存为useOpencv.cpp



然后输入命令:

 mex -v -compatibleArrayDims useOpencv.cpp

可以找到options file的目录:



找到相应的目录下可以看到,这里其实有不同的msvcpp文件,VS版本不一样,所用到的配置文件也不同。



打开msvcpp2012.xml文件修改如下:

可以看到文件的末尾是相关的路径设置。


(1)在PATH后面添加 E:\Program Files (x86)\opencv\opencv\build\x86\vc11\bin;(相关的opencv目录下的bin)

(2)在INCLUDE 后面添加 

E:\Program Files (x86)\opencv\opencv\build\include\opencv2;

E:\Program Files (x86)\opencv\opencv\build\include;

E:\Program Files (x86)\opencv\opencv\build\include\opencv;

注意这里要把具体到opencv和opencv2的目录也添加进去。如果不添加完整,静态链接是会报错。

(3)在LIB后添加 E:\Program Files (x86)\opencv\opencv\build\x64\vc11\lib;

注意的是这里用的是64位的环境,所以是x64后面的lib目录,如果是32bit,用x86的lib目录

(4)在LIBPATH后也要添加 E:\Program Files (x86)\opencv\opencv\build\x64\vc11\lib;


此时在命令行输入:

mex useOpencv.cpp



这个错误,是因为没有正确进行链接,也可能是编译器的bit不对,例如64的matlab,之前设置lib路径的时候用x86下的目录了

解决办法:



在LINKLIB中添加链接时所需要的库文件:

opencv_core2413d.lib opencv_imgproc2413d.lib opencv_highgui2413d.lib opencv_ml2413d.lib opencv_video2413d.lib opencv_features2d2413d.lib opencv_calib3d2413d.lib opencv_objdetect2413d.lib opencv_contrib2413d.lib opencv_legacy2413d.lib opencv_flann2413d.lib

注意这里opencv的版本是2.4.13,版本不一样,文件名中的数字不同。


至此,命令行输入:

mex useOpencv.cpp

若出现以下界面,说明配置成功。


0 0
原创粉丝点击