OpenMVS+VS2015+Windows8配置(编译成功)

其实今天的题目本应是“吾日三省吾身”的,但写了两段之后,感觉含有过多的感慨与抱怨,也许是我自己文笔不够,不能较好的表达我内心的想法吧,所以还是换一个题目,能够让我这篇文章更快通过吧。

oepnMVS的配置。为什么要讲这个,因为openMVS官网介绍的build方法只讲了编译它需要依赖的第三方库与工具,并概略介绍了在Windows,Linux,Mac OS X上编译的方法,实话实说,根据官网的教程,我是没有看懂具体应该怎么编译。因此我开始在在CSDN,百度,QQ群等强大的互联网巨头上的搜索之战,但总的来看,呈现百家齐放,百花争鸣的态势,而且并没有多少人记录过他们的编译过程,即使有,写的都是工科生的风格,不够清晰明了。当我通过各家博客上的资料,不断的尝试,不断的修改方法,终于在昨天编译成功,当时的喜悦是无法言表的。因此,酝酿一碗,今天整理之后记录下来,希望能够帮助后来的童鞋们。~.~

当然,首先要给大家上图一张,让大家有一个期待。

![最终编译效果](https://img-blog.csdn.net/20180908102409936?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MDY2ODgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 然后是附上我修改之后的编译方法:[OpenMVS配置详细教程](https://wenku.baidu.com/view/3f29f54882c4bb4cf7ec4afe04a1b0717ed5b352)

接下来,就直接上干货吧。配置所需要的工具以及依赖库,官网上的没有问题,如下:

##### 依赖库 - Eigen version 3.2 - OpenCV version 2.4 or higher - Ceres version 1.10 or higher - CGAL version 4.2 or higher - Boost version 1.56 or higher - VCG - GLFW ##### 编译工具 - CMake - git - C/C++ compiler like Visual Studio or GCC

虽然上面列出了依赖库,但是编译这些库的时候也会依赖其他比较小的库,比如Ceres ,因为我是研究计算机视觉中的三维重建方向,因此,对如何使用Ceres进行光束法平差较为了解,因此之前就已经编译过了,主要依赖的就是Eigen,Google Flags与glog这几个库,当然,在你看Ceres官网的时候也会推荐使用CXSparse库进行编译,但是我是没有。相反,编译OpenMVS这次倒是用到了CXSparse,这个库非常不好找,如果只是在百度上搜的话我是没有找到,最后是在Github上找到了,可以看到星星只有12颗,很可怜。这里附上下载地址:

![这里写图片描述](https://img-blog.csdn.net/20180908153633440?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MDY2ODgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) [CXSparse](%5BCXSparse%5D%28https://github.com/search?q=CXSparse%29)

首先,在电脑上一个你喜欢的位置建立一个文件夹,名称可以写为 openMVS,比如,我建在了我的G盘。然后在里面新建一个build文件夹,存放后来所有编译好的第三方库的工程文件,这里最好自己下载源码,编译一遍,因为网上提供的有些编译好的库的版本和你的不一致,可能会存在问题,为了保险,就耐心一些吧。然后将你下载好的所有要使用的开源库都放在你建立的 openMVS文件夹下面,即与build同级即可。附上我的目录样式,每个库你都可以在网上搜的到,就不再提供下载地址了。

![文件夹目录](https://img-blog.csdn.net/20180908154407390?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MDY2ODgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

按我给出的文件--openMVS配置方法中的步骤进行,首先需要明确的就是我这里讲的配置方法都是不含cuda的,因为鄙人的电脑比较渣,没钱买NVIDIA的显卡,所以编译openMVS纯属研究学习性质,因此OpenCV、OpenMVG和OpenMVS中都不要用。另外,整个过程中,只有OpenCV,Google Flags可以配置成动态库,其余均为静态。即,OpenCV,Google Flags中BUILD_SHARED_LIBS需要勾选,其余的出现SHARED_LIB都不能勾选。这里附上所有需要的库的版本号:

这里写图片描述

接下来讲解每个库的编译方法。因为我已经在附上的文件里详细的说明了,所以这里我就直接粘贴过来了,只把我再编译的过程中遇到的特殊的地方着重讲一下。

配置OpenCV

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

Eigen不用编译,直接放在OpenMVS文件夹下就行。

VCG

VCG文件也直接存储在openMVS/VCG文件夹下。

Boost

配置Boost库的时候和一般编译Boost的时候不太一样,因为OpenMVS实际上只需要Boost中的个别几个库就ok。所以,完全按照我给的方法去做就行,不用怀疑,因为我当时没有编译成功的时候也是怀疑我的Boost 编译有问题,在网上查了好久的编译方法,才明白上述所说的情况。

  1. Boost文件下载的时候,注意选择相应的编译平台,32/64位和版本,本文用的1.61.0版本,用于VS2015,64位的安装版本,如图所示 。将Boost文件安装在openMVS/Boost文件夹下。安装后,在安装文件夹下,找到bootstrap.bat文件,双击运行。
  2. 完成后,在openMVG\src文件夹内寻找zlib文件夹,我编译时该路径如下所示:
    G:\OpenSource\openMVS\openMVG\src\third_party\zlib
    复制这个路径,打开开始菜单中VS2015文件夹中的VS2015 x64本机工具命令提示符工具,并定位到Boost文件夹内(如何使用DOS界面定位,请自行学习),然后输入
    bjam stage --with-system --with-thread --with-iostreams --with-program_options --with-serialization --with-date_time -sZLIB_SOURCE=/openMVG中zlib的文件夹路径/ address-model=64 link=static runtime-link=shared threading=multi debug release
    用于本次的话就是
    bjam stage --with-system --with-thread --with-iostreams --with-program_options --with-serialization --with-date_time -sZLIB_SOURCE=G:\OpenSource\openMVS\openMVG\src\third_party\zlib address-model=64 link=static runtime-link=shared threading=multi debug release(这里其实只有一个空格,不知道CSDN的编辑器怎么会空这么多)
    然后按回车运行,如图所示。注意SOURCE=后面不要有空格。
    其实这里使用bjam.exe进行编译的,这句话的意思就是讲编译好的库放在Boost/stage下面,并且只编译iostreams,program_options ,serialization,date_time这几个静态库。

Qt##

Qt是我之前已经安装过了,对于OpenMVS来说应该不是必需的,所以可以选择性安装。安装方法请自行百度,就不赘述了。关键是注意要添加Qt的环境变量。但是如果不安装Qt的话,下面的qmake.exe肯定就是不能够使用的,所以还是安装上比较保险。

CGAL##

  1. 首先说一下配置文件中说的加环境变量的问题,加环境变量是为了让Cmake能够自动找到所需要的库的路径,比如Qt,Boost等,当然,如果不加,也可以直接在Cmake中指定,两种方法都可以。
    所以看你自己的喜好,只要能让Cmake找到所依赖库的对应路径就ok。
  2. 将libQGLViewer文件复制到openMVS/libQGLViewer文件夹内,打开开始菜单中VS2015文件夹中的VS2015 x64本机工具命令提示符工具,并定位到libQGLViewer/QGLViewer子文件夹下。
  3. 输入qmake.exe然后回车
  4. 输入nmake然后回车
  5. 将以下路径添加到环境变量的path中:G:\OpenSource\openMVS\libQGLViewer\libQGLViewer-2.7.1
  6. 在环境变量中添加以下变量:
    QGLVIEWERROOT= G:\OpenSource\openMVS\libQGLViewer
  7. 安装CGAL文件,双击进行安装,安装过程中选择64-bits,安装目录到G:\OpenSource\openMVS\CGAL,具体安装方法见配置文件。
  8. 打开cmake-gui,进行设置,勾选CGAL_Boost_USE_STATIC_LIBS,取消BUILD_SHARED_LIBS,然后点Configure
  9. 对于CGAL_Boost_USE_STATIC_LIBS与BOOST_INCLUDE_DIR两个参数,配置文件中说需要用Add Entry添加,但我编译CGAL的时候直接就有了,不需要添加,所以视情况而定。点击OK后,再点击Configure再点Generate。
  10. 找到openMVS/build/CGAL文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的CGAL.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译。有时即使使用管理员身份打开VS了,再生成INSTALL也问出现setlocal的问题(遇到了你肯定知道),这个问题我觉得是你指定INSTALL的生成路径在C盘或者你指定的路径有问题,所以我的处理办法是在其他地方,除了C盘之外的建文件夹,指定Cmake中CMAKE_INSTALl_PREFIX这个参数的值为你新建立的这个文件夹,就可以了,这时即使不适用管理员身份打开VS也可以生成INSTALL。这个问题的解决方法同样适用于其他库的编译。另外,由于生成的是静态库,bin文件夹下并没有dll文件,所以,我并没有添加bin路径到环境变量。
  11. 最后将openMVS/CGAL/auxiliary文件夹拷至C:/Program Files/CGAL下,把openMVS/CGAL/auxiliary/gmp/include文件夹下的3个.h文件分别拷到 INSTALL生成的文件夹\CGAL\include\CGAL\GMP和 INSTALL生成的文件夹\CGAL\include\CGAL\internal\auxiliary下。
  12. 其实在这一步配置的时候,你会发现Boost库的配置只找到了Boost include dirs,但没有找到Boost libraries。但是这里依然能够Configuring done,所以我在配置CGAL的时候暂时没有处理他。当然,要注意,只是暂时。
    这里写图片描述
  13. 另外为了保险,我注意到这里也需要ZLIB库,但是和上一步编译Boost库中用的ZLIB库的路径不同,为了以防万一,我就统一都使用openMVG中的ZLIB库了。如果不统一,我并没有试验过能否编译成功。

CXSparse##

将文件复制到openMVS/CXSparse文件夹下
在openMVS\CXSparse\Project\CXSparse文件夹中找到CXSparse.sln文件,双击以VS2015打开,注意把目标平台选为x64,然后分别在Debug和Release模式下进行编译。

##Ceres##
Ceres的配置没有什么特殊的地方,Eigen,gFlags, glog库都找到并编译好就可以了,唯一需要注意的是Eigen库的版本一定要用Eigen3.2的,因为我在实验了很多次之后,包括编译其他需要Eigen库的源代码的时候,都遇到了这个问题,就是总会出现关于Jet,traits的问题,好像是一个模板类,具体的我记不清楚了。

##openMVG##
就按配置文件中的去做就好了。其实原来我并没有编译过openMVG,一直用的都是老师编译好的,因为听老师说openMVG是他大年三十的晚上整的,好像很难的样子,所以一直没有敢于尝试。这次编译了一下,觉得还好,可能方法不一样,这里使用的是Git去编译的,非常简单。

##openMVS##
最后,终于到了最后。其实前面准备好了,最后的工作也就是轻而易举了。
只说特殊的地方,这里并没有指定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什么的,所以还是自己摸索比较好,印象也比较深。同时,学会问题的解决方法也是很重要的,方法还要自己摸索。谢谢大家了。

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值