其实今天的题目本应是“吾日三省吾身”的,但写了两段之后,感觉含有过多的感慨与抱怨,也许是我自己文笔不够,不能较好的表达我内心的想法吧,所以还是换一个题目,能够让我这篇文章更快通过吧。
oepnMVS的配置。为什么要讲这个,因为openMVS官网介绍的build方法只讲了编译它需要依赖的第三方库与工具,并概略介绍了在Windows,Linux,Mac OS X上编译的方法,实话实说,根据官网的教程,我是没有看懂具体应该怎么编译。因此我开始在在CSDN,百度,QQ群等强大的互联网巨头上的搜索之战,但总的来看,呈现百家齐放,百花争鸣的态势,而且并没有多少人记录过他们的编译过程,即使有,写的都是工科生的风格,不够清晰明了。当我通过各家博客上的资料,不断的尝试,不断的修改方法,终于在昨天编译成功,当时的喜悦是无法言表的。因此,酝酿一碗,今天整理之后记录下来,希望能够帮助后来的童鞋们。~.~
当然,首先要给大家上图一张,让大家有一个期待。
接下来,就直接上干货吧。配置所需要的工具以及依赖库,官网上的没有问题,如下:
虽然上面列出了依赖库,但是编译这些库的时候也会依赖其他比较小的库,比如Ceres ,因为我是研究计算机视觉中的三维重建方向,因此,对如何使用Ceres进行光束法平差较为了解,因此之前就已经编译过了,主要依赖的就是Eigen,Google Flags与glog这几个库,当然,在你看Ceres官网的时候也会推荐使用CXSparse库进行编译,但是我是没有。相反,编译OpenMVS这次倒是用到了CXSparse,这个库非常不好找,如果只是在百度上搜的话我是没有找到,最后是在Github上找到了,可以看到星星只有12颗,很可怜。这里附上下载地址:
首先,在电脑上一个你喜欢的位置建立一个文件夹,名称可以写为 openMVS,比如,我建在了我的G盘。然后在里面新建一个build文件夹,存放后来所有编译好的第三方库的工程文件,这里最好自己下载源码,编译一遍,因为网上提供的有些编译好的库的版本和你的不一致,可能会存在问题,为了保险,就耐心一些吧。然后将你下载好的所有要使用的开源库都放在你建立的 openMVS文件夹下面,即与build同级即可。附上我的目录样式,每个库你都可以在网上搜的到,就不再提供下载地址了。
按我给出的文件–openMVS配置方法中的步骤进行,首先需要明确的就是我这里讲的配置方法都是不含cuda的,因为鄙人的电脑比较渣,没钱买NVIDIA的显卡,所以编译openMVS纯属研究学习性质,因此OpenCV、OpenMVG和OpenMVS中都不要用。另外,整个过程中,只有OpenCV,Google Flags可以配置成动态库,其余均为静态。即,OpenCV,Google Flags中BUILD_SHARED_LIBS需要勾选,其余的出现SHARED_LIB都不能勾选。这里附上所有需要的库的版本号:
接下来讲解每个库的编译方法。因为我已经在附上的文件里详细的说明了,所以这里我就直接粘贴过来了,只把我再编译的过程中遇到的特殊的地方着重讲一下。
1.网上下载的openCV一般为exe格式,如图所示 ,双击运行,设置安装路径为openMVS/openCV下,然后进行安装。安装后会有2个文件夹,一个sources文件夹,一个build文件夹。本文只用sources文件夹
2.打开cmake软件中的cmake-gui文件,sorce code设置为openCV文件夹里的src子文件夹即openMVS/openCV/sources,build设置为openMVS/build/openCV,详见图,然后点击Configure,并选择相应的编译平台。本文选择Visual Studio 14 2015 Win64
3.取消BUILD_WITH_STATIC_CRT、BUILD_PERF_TESTS、BUILD_TESTS以及所有包含CUDA项
4.勾选BUILD_SHARED_LIBS,然后再点击Configure,之后点击Generate
5.找到openMVS/build/openCV文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的OpenCV.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译
Eigen不用编译,直接放在OpenMVS文件夹下就行。
VCG文件也直接存储在openMVS/VCG文件夹下。
配置Boost库的时候和一般编译Boost的时候不太一样,因为OpenMVS实际上只需要Boost中的个别几个库就ok。所以,完全按照我给的方法去做就行,不用怀疑,因为我当时没有编译成功的时候也是怀疑我的Boost 编译有问题,在网上查了好久的编译方法,才明白上述所说的情况。
Qt是我之前已经安装过了,对于OpenMVS来说应该不是必需的,所以可以选择性安装。安装方法请自行百度,就不赘述了。关键是注意要添加Qt的环境变量。但是如果不安装Qt的话,下面的qmake.exe肯定就是不能够使用的,所以还是安装上比较保险。
将文件复制到openMVS/CXSparse文件夹下
在openMVS\CXSparse\Project\CXSparse文件夹中找到CXSparse.sln文件,双击以VS2015打开,注意把目标平台选为x64,然后分别在Debug和Release模式下进行编译。
Ceres的配置没有什么特殊的地方,Eigen,gFlags, glog库都找到并编译好就可以了,唯一需要注意的是Eigen库的版本一定要用Eigen3.2的,因为我在实验了很多次之后,包括编译其他需要Eigen库的源代码的时候,都遇到了这个问题,就是总会出现关于Jet,traits的问题,好像是一个模板类,具体的我记不清楚了。
就按配置文件中的去做就好了。其实原来我并没有编译过openMVG,一直用的都是老师编译好的,因为听老师说openMVG是他大年三十的晚上整的,好像很难的样子,所以一直没有敢于尝试。这次编译了一下,觉得还好,可能方法不一样,这里使用的是Git去编译的,非常简单。
最后,终于到了最后。其实前面准备好了,最后的工作也就是轻而易举了。
只说特殊的地方,这里并没有指定OpenMVG_DIR,因为你在用Cmake之后就会发现,根本没有OpenMVG_DIR这个参数,所以直接略过。其他参数按照配置文件中设置即可。
最重要的,应该要说的就是CGAL编译中第13条的问题,关于Boost 的问题,因为在这里也遇到了这个问题,只是这里不解决就Configuring 失败了,但是在网上搜索了一番,并没有找到切实可行的办法,最后是在GitHub的openMVS网站上找到了答案。记住当你编译源码总是出现问题且找不到答案的时候,不要忘了这个方法,就是找GitHub上的issue模块,这里有很多人编译这个源码时遇到的问题,当然,也会有该源码维护者的解答,你可以找找试试有没有人遇到和你相同的问题,如果有当然最好,没有,你也可以提问啦。所幸,我找到了和我有相同问题的人。先附上去哪里找issue
然后在Filters中搜索Boost libraries,自己去找吧,方法是最重要的。当然,这里我也提供解决这个问题的方法,就是在Cmake中添加一个参数Boost_USE_STATIC_LIBS,然后在Configure,之后会出现让你指定缺少的boost的路径,指定好就ok了,附上网址。这个问题貌似是因为我们编译的boost库是静态库,而且只是编译了那么几个需要的,所以Cmake一直找不到这几个库的路径,而且openMVG的CmakeList里也没有指定Boost libraries 的路径参数,所以,需要自己用Add Entry添加。
问题参考
好了,关于openMVS的编译方法,就写到这里吧。经过这两天的编译,得到的最深刻的体会就是永远不要放弃,每当自己想放弃的时候就先转移自己的注意力,去网上问问其他人有没有解决的办法,但是不能忘了这个问题,因为你遇到了它,不解决就永远是你的问题。其实问别人也不会得到太好的答案,毕竟求人不如求己,我在网上询问他人的时候,不是回复忘了就是让你自己去学习Cmake什么的,所以还是自己摸索比较好,印象也比较深。同时,学会问题的解决方法也是很重要的,方法还要自己摸索。谢谢大家了。