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
若出现以下界面,说明配置成功。
- Matlab2016b:通过mex调用opencv
- mex调用OpenCV项目工程文件
- Matlab通过mex调用CUDA的方法
- mex如何调用外部库(以OpenCV为例)
- 使用VS2013+MATLAB2016B开发MEX(64位)程序
- Matlab2016b
- matlab opencv C++ mex
- [Matlab] mex混编OpenCV
- Android Studio 通过NDK调用OpenCV
- Xcode通过动态库调用OpenCV
- java通过jni调用opencv处理图像
- Matlab 调用 C mex方法
- mex 里面调用matlab函数
- matlab 调用mex -setup问题
- 基于OpenCV的mex文件及其编译
- mex
- Mex
- mex
- 数据结构--戴克斯特拉算法
- 学习笔记--下拉框实现
- 保护你系统安全的影子系统
- jdk,jre,jvm
- oracle数据库初步之操作表
- Matlab2016b:通过mex调用opencv
- 网页背景音乐播放器html代码
- Linux中tty框架与uart框架之间的调用关系剖析
- 玲珑杯 A -- A plus B
- 美女
- 数据结构--普里姆算法
- 2016.11.25
- 【玲珑学院 1057 - Private Value】+ map
- video4linux基础