一、配置OPENCV
条件:win7,64位,VS2015.
问题1.opencv的版本与VS版本不匹配
一开始下载的版本是opencv2.4.13.。里面只有VC11和VC12.分别对应VS2012和VS2013
(vc8 = Visual Studio 2005,vc9 = Visual Studio 2008,vc10 = Visual Studio 2010,vc11 = Visual Studio 2012,vc12 = Visual Studio 2013)
看网上有博客(见以下链接)关于opencv2.4.13在VS2015上的配置问题,说到VS2012以后的版本都用VC12即可,然后就是正常的环境变量的配置等步骤。结果,在我这里行不通,提示说找不到某个msvcp20d.dll文件。
visual studio2015+opencv2.4.13配置:http://blog.csdn.net/keith_bb/article/details/53324358
于是,傻乎乎地去下载msvcp20d.dll文件,结果根本无法装载。
后来又看到网上说,出现这种错误的原因是,VS2015对应需要配置VC14,我们可以自己用CMake编译出VC14。(按理来说该方法是可行的,可能是我配置过程出错,大家可以尝试一下)
OpenCV 2.4.13 在 VS2015上的配置:http://blog.csdn.net/lfw198911/article/details/52649459
按照以上的做法,仍然行不通。
无奈之下,决定换一个opencv的版本,选择了Opencv3.1.0,里面包含VC12和VC14。选择了VC14后按原步骤配置成功。
问题2.opencv 从3.0.0开始不再提供合并的库,他们把大量的算法存放在opencv_contrib目录下面的未稳定功能模块里。官方的说法是,那些还不十分稳定的函数模块都被放在了opencv_contrib模块里边。
要想在OpenCV3.0+中直接使用SIFT, SURF算法,需要现安装扩展模块opencv_contrib。这两个算法都在这个扩展模块的xfeatures2d模块里。在这里可以找到:https://github.com/Itseez/opencv_contrib/tree/master/modules/xfeatures2d/src
解决步骤:
1)到官网下载opencv_contrib,对于版本,最好是下载与Opencv对应的版本;
2)下载CMake,比如我下载的是cmake-3.10.0-rc3-win64-x64,要根据自己的系统属性来下;
3)用cmake_gui.exe进行编译。
对编译的具体实现步骤可参考一下博客:
在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib:http://www.cnblogs.com/jliangqiu2016/p/5597501.html
在编译过程中,注意选择对编译器版本和对应的64位或32位。以下博客对编译过程中可能出现的一些问题做出了详细介绍
visual studio 2012 下配置OPENcv3.1 和CMAKE问题总结:http://blog.csdn.net/qq_25458977/article/details/54612655
注:每个人的电脑配置和环境,以及具体问题或多好少会不一样,所以别人提供的方法要有思考的执行,而不是照搬,否则会陷入无尽的尝试、失败的循环之中。
问题3.最后include刚刚编译生成的头文件时出错
其实这一步应该是不会出错的,出错原因是自己不小心将包含目录等的路径搞错了。顾名思义,包含路径就是你在写程序时,需要用到的opencv库里面一些现成头文件所存放的路径,你要把他们通过该路径包含进来才能使用。
库路径,就是opencv里面的库所在的路径。所以还是要多理解多思考,不能照搬。
问题4.如何达到配置一次,每一次新建工程还有同样的配置,无需重复配置呢?
就我的经验而言,VS2010是配置一次就好了,但是VS2015则不行。
做法:新建一个项目属性文件如opencv.props,在工程中找到该属性文件,每次新建工程的时候添加该属性文件即可。
二、matlab2015b与VS2013混合编程(调用OPENCV3.0.0)
注意:本人试验过几个版本(m15,m10,v15,v10,v13),经试验后发现VS2013最合适!!!而且VS2013在配置opencv的过程中也比较不容易出错。matlab2010与VS2010,编译成功,但是在调用函数的时候有各种问题!matlab2015与VS2010,我好像都没有编译成功!
混合编程解释:其实就是matlab利用安装在电脑上的编译器,将.cpp文件编译成.mexw64文件,然后像调用普通函数一样调用由c编写的函数,前提是用c编写的函数需要进行一定的修改,写成mexFunction的形式 。
有关opencv的配置:https://www.cnblogs.com/ssjie/p/4943439.html
有关函数的编写具体可参考:http://blog.csdn.net/zouxy09/article/details/20553007
有关编译:http://www.ilovematlab.cn/thread-475887-1-1.html,这个楼主的回答是可行的!而且方便,但是我用的时候,改库名称时前面不需要一横杠!!注意的是你的matlab是多少位就应该调用多少位的opencv!
因为上传图片比较麻烦,所以就没传图啦,什么时候能改进一下,能直接复制粘贴就好了