OpenMVG与OpenMVS之OpenMVG编译运行


前言

主要介绍OpenMVG的编译,从https://github.com/openMVG/openMVG下载OpenMVG源码,也可以采用git来下载。


一、OpenMVG编译

1.1 安装git,https://git-scm.com/downloadshttps://registry.npmmirror.com/binary.html?path=git-for-windows/,OpenMVG需要采用git命令行来更新三方库cereal。打开git cmd,进入到OpenMVG保存路径,执行如下命令。

git clone https://github.com/openMVG.git
cd openMVG
git submodule init
git submodule update

1.2 OpenMVG依赖下载
https://github.com/openMVG/openMVG/tree/develop/src/dependencies,下载OpenMVG的三个依赖库,并解压到OpenMVG/src/dependencies目录下。
在这里插入图片描述

二、CMAKE编译

2.1 打开cmake-gui,设置源码目录为openMVG/src目录,并设置一个输出目录为openMVG_build以及安装目录,勾选OpenMVG_BUILD_EXAMPLES、OpenMVG_BUILD_TESTS即可编译。
在这里插入图片描述

2.2 点击Configure,直到没有红色条目,在点击Generate即可生成vs工程。

2.3 不同的VS版本,不同电脑编译的错误不同,在VS2015/x64的编译情况中,有些版本的OpenMVG编译并不能通过,本文章采用如下版本编译通过,CMakeLists.txt经过如下修改。
链接:https://pan.baidu.com/s/16AJJ8vNRpCIyF90s2Ap43A
提取码:z5mi

  • 注释修改Eigen相关代码;
  • 注释掉 find_package(Ceres QUIET HINTS ${CERES_DIR_HINTS})
  • 注释掉if (DEFINED OpenMVG_USE_INTERNAL_JPEG)相关语句;

具体改动情况如下:

# ==============================================================================
# Eigen
# ==============================================================================
# - external by default
# - external if EIGEN_INCLUDE_DIR_HINTS is defined
# - internal if Eigen not found
# ==============================================================================
#find_package(Eigen3 QUIET)
#if (NOT Eigen3_FOUND)
  set(EIGEN_INCLUDE_DIR_HINTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/eigen)
  set(OpenMVG_USE_INTERNAL_EIGEN ON)
  find_package(Eigen QUIET)
#else()
#  set(EIGEN_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})
#endif()
# ==============================================================================
# Ceres
# ==============================================================================
# - external by default if CERES_DIR_HINTS or find_package found a valid Ceres
# - internal if ceres not found (ceres-solver+cxsparse+miniglog)
# ==============================================================================
#find_package(Ceres QUIET HINTS ${CERES_DIR_HINTS})
if (NOT Ceres_FOUND)
  set(OpenMVG_USE_INTERNAL_CERES ON)
  set(CERES_INCLUDE_DIRS
    ${CMAKE_CURRENT_SOURCE_DIR}/third_party/ceres-solver/include
    ${CMAKE_CURRENT_SOURCE_DIR}/third_party/ceres-solver/internal/ceres/miniglog
    ${PROJECT_BINARY_DIR}/third_party/ceres-solver/config)
    FILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/third_party/ceres-solver/VERSION" CERES_CONFIG)
    STRING(REGEX REPLACE "version ([0-9.]+).*" "\\1" CERES_VERSION ${CERES_CONFIG})
  set(CERES_LIBRARIES openMVG_ceres)
endif()
# if (DEFINED OpenMVG_USE_INTERNAL_JPEG)
# 	message(STATUS "LIBJPEG (internal)")
# else()
# 	message(STATUS "LIBJPEG (external)")
# endif()

2.4 编译错误解决

在有些电脑上仅修改上述CMakeLists.txt即可编译通过,本文在另一台电脑上编译出现的问题及其修改办法如下,经过适当修改,最终成功编译通过并安装。


34>E:\GIS\openMVG\src\openMVG/matching/matcher_hnsw.hpp(157): fatal error C1001: 编译器中发生内部错误。

双击文件定位到文件中,定位到如下代码附近,猜测可能是由于编译器的版本导致的,主要是在并行处理的代码中,因此在camke-gui中将并行的宏取消勾选,取消勾选OPENMVG_USE_OPENMP

   #ifdef OPENMVG_USE_OPENMP
      #pragma omp critical
      #endif
      {
      for (const auto & res : result)
      {
        pvec_indices->emplace_back(i, res.second);
        pvec_distances->emplace_back(res.first);
      }
      }
    }   
    return true;
  };

error C2899: 不能在模板声明之外使用类型名称

定位文件中,通过查阅资料可知,是因为在非模板类型中使用了typdename关键字,注释掉 typename 即可
在这里插入图片描述


将不能识别的语法简单改写,如下。

将该语句
map_rots[{cur_rotation.i,cur_rotation.j}] = cur_rotation;
改写为:
Pair key = {cur_rotation.i,cur_rotation.j};
map_rots[key] = cur_rotation;

还有一些工程需要添加/bigobj才能编译通过,具体根据错误提示添加即可。

点击项目属性->C/C++->命令行,在下面的其他选项中添加 /bigobj 即可。

2.5 INSTALL,生成该工程时,将进行安装,若没有修改安装目录(CMAKE_INSTALL_PREFIX变量指定),将默认安装到C盘下,建议cmkae时,修改变量值,若没有修改,将会出现没有权限安装,则需要以管理员的身份运行VS,打开工程,再执行安装操作。

三、运行测试

3.1 图像数据集下载
https://github.com/openMVG/Image_datasets

3.2 运行测试

cmd进入bin目录,输入如下命令执行,各步骤的介绍将在后面的文章中进行分析。

//指定图像路径,相机参数文件,输出路径;
.\openMVG_main_SfMInit_ImageListing.exe -i E:\GIS\ReconstructionDataSet-master\AvignonHotelDesMonnaies -d E:\GIS\openMVG\src\openMVG\exif\sensor_width_database\sensor_width_camera_database.txt -o E:\GIS\OpenMVG_OUT

//指定输入、输出文件;
.\openMVG_main_ComputeFeatures.exe -i E:\GIS\OpenMVG_OUT\sfm_data.json -o E:\GIS\OpenMVG_OUT

.\openMVG_main_ComputeMatches.exe -i E:\GIS\OpenMVG_OUT\sfm_data.json -o E:\GIS\OpenMVG_OUT

.\openMVG_main_IncrementalSfM.exe -i E:\GIS\OpenMVG_OUT\sfm_data.json -m E:\GIS\OpenMVG_OUT -o E:\GIS\OpenMVG_OUT\Recons
 
.\openMVG_main_ComputeSfM_DataColor.exe -i E:\GIS\OpenMVG_OUT\Recons\sfm_data.bin  -o E:\GIS\OpenMVG_OUT\colored.ply

.\openMVG_main_ComputeStructureFromKnownPoses.exe -i E:\GIS\OpenMVG_OUT\Recons\sfm_data.bin  -m E:\GIS\OpenMVG_OUT -o E:\GIS\OpenMVG_OUT\Recons\robust.bin -f E:\GIS\OpenMVG_OUT\matches.f.bin

.\openMVG_main_openMVG2openMVS.exe -i E:\GIS\OpenMVG_OUT\Recons\robust.bin -o E:\GIS\OpenMVG_OUT\scene.mvs

四、总结

4.1 在实际的测试中,算法能成功执行,但由于没有启用 OPENMVG_USE_OPENMP,导致运算效率较低,因此,应尽量保证启用OPENMVG_USE_OPENMP以便获得效率提升。各步骤并不一定都需要执行,可根据实际情况调整。

4.2 实验中采用11张不同角度拍摄的如下建筑照片,最终生成模型的点云文件。
在这里插入图片描述
在这里插入图片描述

最终生成了一个scene.mv的文件,可作为OpenMVS的输入,对点云文件进行重建。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秘境之眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值