bundler-v0.4在VS2013环境下源码编译过程(亲测超全)

注:最好使用VS2013.使用vs2015会报错重定向问题。可能2015的基础库函数里面定义了int32_t。导致项目中的定义重定向了。

 1.首先编译f2c时,会给出无法找到#include"sysdep1.h"文件的错误。进入f2c的目录,将sysdep1.h0文件名修改为sysdep1.h即可。

同时将signal1.h0文件名修改为signal1.h。再次编译f2c库时,会提示无法找到#include"arith.h"文件的错误,同时在f2c目录下并没有名字为arith.h的文件,

这时可以新建一个arith.h文件,在文件里添加如下内容即可:

 #define IEEE_8087

#define Arith_Kind_ASL 1

#define Long int

#define Intcast (int)(long)

#define Double_Align

#define X64_bit_pointers

#define QNaN0 0x0

#define QNaN1 0xfff80000

 这时,编译f2c,便成功了。


2.接下来编译keyMatchFull和Bundler项目

    error C2491: “erf”: 不允许 dllimport 函数的定义

    解决办法是将函数注释掉,不需要这个函数。

    还会报错一个LNK问题。

    解决办法是将imagelib那个项目编译一遍,会自动在LNK文件处添加依赖库,让问题得以解决。


3.编译Bundlr2PMVS

     在编译之前请大家在/src打开Bundle2PMVS.cpp将217行的

 fprintf(f_scr,"mv pmvs/%s.rd.jpg%s/visualize/%08d.jpg\n",修改为 fprintf(f_scr, "mv %s.jpg %s/visualize/%08d.jpg\n"。   

   error C3861: “mkdir”:  找不到标识符

   在文件的开头添加#include<direct.h>,

   同时将mkdir替换为_mkdir,如下所示:

    //mkdir(output_path,0770);

  _mkdir(output_path);

   至此,Bundle2PMVS编译成功。


4.编译RadialUndistort时,在RadialUndistort.cpp文件中会出现“无法识别的标识符index”。

 原先的代码如下所示:

 //char *space = index(buf, ' ');

 //if (space) *space = 0;

  将其替换为:

 std::string str(buf);

  intspace_pos = str.find(' ');

 str.at(space_pos) = 0;

  files.push_back(str);

   error C1083: 无法打开包括文件: “jpeglib.h”: No such file or directory

   在RadialUndistort的属性页的c/c++  ->常规 -> 附加包含目录-> 增加项目lib包下的jpeg/src路径。(..\lib\jpeg\src)

   属性---c/c++----常规-----附加包含目录添加..\lib\jpeg\src;..\lib\imagelib;..\include; ..\lib\matrix; ..\lib\sfm-driver

    链接库----常规----------附加库目录增加文件路径\bundler-v0.4-source\vc++\Debug


在RadialUndistort.cpp中,错误来源assert(files.size() == cameras.size());,

查看ReadListFile,注释str.at(space_pos) = 0;files.push_back(std::string(buf));,把files.push_back(str);改为         files.push_back(str.substr(0,space_pos));

  至此,RadialUndistort编译成功。


5.接下来开始准备使用Cygwin跑bundler

   自己创建一个文件夹XX(注意文件夹位置,搞错了cygwin是会编译报错的)

   在XX中创立一个文件夹bin,在该文件夹中:

        将bundler项目中的bin文件夹中的东西全部复制过去。

      bundler-v0.4-source\vc++\Debug\目录下的Bundler.exe,KeyMatchFull.exe,RadialUndistort.exe, Bundle2PMVS.exe, jpeg.dll,ann_1.1_char.dll文件统统复制过去。

       下载SITT。将下载完成后,解压该文档,将目录下的siftWin32.exe文件拷贝过去。

        bundler-v0.4-source目录下的RunBundler.sh文件复制过去。

        创建一个picture文件夹,里面放要处理的图片。


修改RunBundler.sh和ToSift.sh:

      把RunBundler.sh文件中BASE_PATH=$(dirname $(which $0)); 一句等号后边的东西替换为Bundler的根目录,也就是RunBundler.sh文件所在的目录,记得加双引号。

      如BASE_PATH="E:/SDK/bundler-v0.4-source";。

      然后把ToSift.sh文件中BIN_PATH设为bin目录,如BIN_PATH="E:/SDK/bundler-v0.4-source/bin"。


6.打开Cygwin,cd定位到Bundler根目录下。然后输入./RunBundler.shpictures 应该运行成功。



      生成bundler输出的文件大多以“bundle_*.out”的形式来命名,我们称之为“bundle文件”。

      缺省命令下,Bundler在每张图片经过分析和注册(register)后都会输出一个相应的bundle文件用来保存当前的状态信息,并以“bundle_<n>.out”的形式命名。

       当所有的文件都注册后,Bundler就会输出一个最终的文件“bundle.out”。另外,每一回合结束时还会紧接着生成一些后缀名为“ply”的文件,这些文件包含的是经过重建后的相机和点的信息。


7.(将Bundler的输出转换为CMVS-PMVS2的输入)

         将bundler2vis.exe拷贝到bundler根目录下(生成bundler2vis.exe在后面有介绍)。

        Bundler会生成一个Bundle2PMVS.exe用于将Bundler生成的结果转化成CMVS要求的输入。注意这里的操作一定是在bundler的根目录下面。否则后面生成的目录文件会有错

        $ ../bin/Bundle2PMVS.exe prepare/list.txt bundle/bundle.out


    此时生成了pmvs子目录, 编辑里边的prep_pmvs.sh(可以用Notepad++,不建议用win自带的notepad), 指明BUNDLE_BIN_PATH路径来寻找RadialUndistort.exe和Bundle2Vis.exe。

     注意我们用的是Cygwin所以改BUNDLE_BIN_PATH要注意目录的格式,为了方便我们常常写成BUNDLER_BIN_PATH=../bin

  完成最后的转换$ ./pmvs/prep_pmvs.sh(运行时可能会报错,‘\r’之类的错误,可以参考http://blog.csdn.net/u010922186/article/details/41825237,修正错误)

      修正方法,在cygwin中定位到prep_pmvs.sh所在目录:dos2unix prep_pmvs.sh

      然后运行  $ ./pmvs/prep_pmvs.sh

     在pmvs目下生成txt, visualize, models目录和bundle.rd.out, list.rd.txt, vis.dat,pmvs_options.txt文件, 这些都是PMVS2的输入。


8.关于Bundle2Vis.exe生成

    新建c++空项目Bundle2Vis.cpp,从bundler的src中添加Bundle2Vis.cpp, lib/sfm-driver中添加sfm.h和 sfm.c,

    属性---c/c++----常规-----附加包含目录增加4个目录,来自文件路径\bundler-v0.4-source\lib\sba-1.5;路径\bundler-      v0.4-source\include; 路径\bundler-v0.4-source\lib\matrix;路径\bundler-v0.4-source\lib\sfm-driver

    链接库----常规----------附加库目录增加文件路径\bundler-v0.4-source\vc++\Debug

    生成可执行文件Bundle2Vis.exe,放入bin下


猜你喜欢

转载自blog.csdn.net/qq_42666483/article/details/80997718