openMVG sample使用(填坑)

在使用openMVG_sample_multiview_robustEssential_ba的过程中遇到了很多的坑,今天来填一下。

openMVG在平台debug win32上生成了很多的lib和exe文件,使用这些exe文件可以直接双击执行或者在linux命令行下使用命令行和相关参数进行运行,得到的结果一般都在exe本目录下,取得图片一般都是openMVG_master/src/openMVG/openMVG_samples/imageData里面,里面一共有三组图片。

首先一定要确定编译生成原项目和自己编程测试的平台配置要一样,我这里选取的是debug(或者release也行) win32平台进行编译,不然的话会出现运行库的平台模板x86和目标计算机平台x64不一致的情况。

其次一定要在配置项目属性的时候,记着将所有的属性与样例工程属性调整到完全一致,比如包含目录和依赖库目录,这里要注意的一个点是包含目录和依赖库目录不完全都是openMVG目录下的东西,也有可能是third_party或者non_Free里面的头文件或者是静态库,总之一定要与原项目保持一致。

最后一点是在运行的过程中出现了一些错误,比如M_PI未定义,计算robustRelativePose的时候matrix越界等问题,吭哧了很久问了同学才发现自己的项目属性里面C/C++-->预处理器-->预处理器定义里面定义了这些宏定义:

WIN32
_WINDOWS
NOMINMAX
_USE_MATH_DEFINES
OPENMVG_USE_AVX2
THIS_SOURCE_DIR="F:/openmvg_master/src/openMVG_Samples/multiview_robust_essential"
__SSE2__
__SSE3__
__SSSE3__
__SSE4_1__
__SSE4_2__
__AVX__
__FMA__
__BMI2__
__AVX2__
OPENMVG_USE_OPENMP
CMAKE_INTDIR="Debug"

其中的_USE_MATH_DEFINES解决了M_PI的未定义问题,定义了THIS_SOURCE_DIR的目录,其他的看不太懂,应该是OPENMVG_USE_AVX2这些解决了matrix越界的问题。

把这些问题都解决之后就可以正常跑起来了,跑出来的结果是把SFM_DATA都存储在了ply文件里,猜测是所有三维特征点的坐标都存起来了,但是由于没有加上vertex等的头设置,所以没法用meshlab显示出来,可以后续修改之后给它显示出来或者使用openMVG的UI功能或者什么函数能把SFM_DATA给3D显示出来。

经验教训:

1.因为sfm的过程比较耗时,所以一定要耐心等待运行结果(没有消息就是好消息)。

2.计算机视觉里面遇到图像计算越界的情况,可以先查看是否图片太大导致数据越界,其次要看宏定义这些设置,一定要跟人家正统的项目属性设置完全一致。

3.在读取图片的时候,发现只能用这种方式读取图片,直接设置图片的路径和名字反而不能正常读取。(不太清楚为什么)

const std::string sInputDir = stlplus::folder_up(string(THIS_SOURCE_DIR))
    + "/imageData/SceauxCastle/";

4.多与人交流,和师兄师姐搞好关系,多问问,别人随意一句话说不定可以省下自己很多苦思冥想的时间。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值