编程经验:Cmake编译Opencv3.0&extra model所遇到的种种问题~

       前段时间调研一个算法,作者提供了源代码,很自豪的宣布源代码已经集成在了3.0中,于是我就开始了“苦逼”的配置之旅,结果遇到了N个bug,还好自己有截图的习惯,本文就说说我遇到的问题,以及如何解决部分问题。

1. opencv_contrib-master

       这是Opencv3.0的额外模块,里面提供了诸如xfeatures2d等新模块,集成了近两年来提出的优秀算法,比如我之前研究的Latch特征,就集成在了这个extra module中,但最主要的是,这个模块中的代码支持Matlab混合编程,它对每一个算法都提供了mexfunction函数,这就给混合编程大大缩短了时间,我们只需要将mexfunction在Matlab中重新编译一遍,就可以直接调用算法。下面是extra module的目录结构,大家如果有心情就看一下matlab/readme.txt,提供了两种编译extra module的方法,以及教你如何写mexfunction。里面写的相当拗口,那是相当的!

2. 利用Cmake编译extra module

根据matlab/readme.txt中提示的方法我们是编译不出来正确的结果的,因为里面少了很多内容,还是直接用Cmake进行编译吧!下载一个Cmake2.8.12,下载一个Opencv3.0beta版本原代码(注意,一定要beta版本的),配置Opencv3.0正确的路径,在额外路径选项上设置下图路径:


这个时候我们点击configure,会出现如下提示错误:


选择win64编译,又报下面的错误:


这是由于机器装的CUDA库不匹配的原因,勾选掉WITH_CUDA选项,该错误消失,但又出现新的错误:无力撰写。。。。
直接上文字经验吧,下面是各种错误以及对应解决办法!

第一:只有在X64平台Release模式下,OpenCV3.0才能将matlab编译通过,否则提示:

1. Matlab:

2. mex:E:/MATLAB/R2013b/bin/mex.bat

3. Compiler/generator: Not working(bindings will not be generated)

 

第二:提示opencv_core找不到,原因在于cmakelist.txt文件被破坏掉,重新生成3.0并编译

 

第三:opencv3.0提供额外模块,名曰opencv_contrib-master,最好放在3.0的module模块下,在cmake的时候,需要指定额外属性OPENCV_EXTRA_MODULE_PATH为额外模块真实路径。

 

第四:使用Cmake的时候,需要取消WITH_CUDA选项。

 

第五:VS2010编译的时候,先生成ALL_BUILD,在生成INATALL。后者起到的功能是将所有模块(含有额外模块,MATLAB模块)的include文件汇总在一起,所以在配置VS2010的时候,也应该添加INATALL下的include目录,而不是BUILD级别下面的。

 

第六:新发布的3.0中缺少几个python文件,需要重新添加,也缺少ippicv_windows_20141027.zip,需要重新下载。

 

第七:有的时候会出现找不到mex.bat的情况,看来cmake也不一定是靠谱的。


第八:不论采用VS2010还是VS2013,编译额外模块的时候均报错,如图所示:

3. 编译extra module中的mexfunction遇到的问题

我编译的对象是xfeatures2d工程中的LATCHBridge.cpp文件,编译之前需要事先将OpenCV3.0的相关信息添加到文件中,修改部分为红框内内容:

这样就可以对文件进行编译了,只不过可能还会出现额外模块与std不兼容的问题。
编程经验:Cmake编译Opencv3.0&extra model所遇到的种种问题~_第1张图片

编程经验:Cmake编译Opencv3.0&extra model所遇到的种种问题~_第2张图片

4. 结论

一句话,OpenCV3.0的额外模块仍旧不成熟,混合编程无法进行,期待稳定的extra module赶紧公布出来。



你可能感兴趣的:(编程,经验,cmake)