PMVS算法源程序 VS2008下实现

来源:互联网 发布:淘宝试用平台哪个最好 编辑:程序博客网 时间:2024/06/15 20:16

首先构建一个空的项目pmvs,控制台应用程序,然后加pmvs2下的base下的三个文件夹拷贝到项目下,然后对应头文件及源文件添加到项目中。改写新建项目中的pmvs.cpp,将pmvs2中main里面的pmvs2.cc里面的部分内容添加到pmvs.cpp中,可以改写这个main函数的方法,不然执行的时候要传入参数。具体改写的内容下面附上大家参考。大家酌情更改。

下一步就是在.cc文件最上方添加预编译头#include "stdafx.h",这个东西就是跟名字意思一样,先编译,也是微软特有的,对于MFC之类,include的文件非常多,这样可以加快编译速度。

下面开始编译,这个时候会出现错误,这些错误一一解决。

错误 7 error C2065: “M_PI”: 未声明的标识符 f:\pmvs2\pmvs2\pmvs2\image\camera.cc 316 pmvs2

首先这个错误,这个错误的解决

项目添加一个gsl的库,这个是c语言中的科学计算的库,在项目工具选项中添加。

然后在项目中添加#include <gsl/gsl_math.h>

然后消除了上面的错误之后 再一次编译

下面会出现

clip_image002

好的,下面我们就重点看mylapack.cc这个文件。

float C[M * N];这个在linux直接定义一个数据就可以了。而在windows下要先实例化,或者初始化。改为float *C = new float[M * N];

改完了上面的错误之后再一次编译

clip_image004

好的,下面继续,我们就先看point.cc这个文件

string 类型也要初始化,按照是不是应该给string类型分配一个内存空间,采用了一个迂回的办法

string header;

char str[1024];

istr >> str;

header = string(str);

错误 1 fatal error C1083: 无法打开包括文件:“sys/time.h”: No such file or directory f:\pmvs2\pmvs2\pmvs2\pmvs\seed.cc 5 pmvs2

这个直接注释掉,这个是linux下的库,直接用#include <time.h>

struct timeval tv;

gettimeofday(&tv, NULL);

time_t curtime = tv.tv_sec;

换成clock_t curtime = clock();

再次编译

clip_image006

下面的错误就是这个线程库的问题了pthread这个线程库

这边主要是在linux下面,这个线程的初始化为数组,这边我们改成vector,例如:

//pthread_t threads[m_fm.m_CPU];

vector<pthread_t> threads(m_fm.m_CPU);

这样改好之后,下面编译基本上就没有错误了,主要就是linux下定义数组的时候不初始化,而windows下要初始化,主要这个区别

下面基本上就是链接错误了。

这个主要是这个pmvs程序引用了其他的库,这个时候在链接附加依赖项之后就可以编译通过,运行了。

上面可能不同机子有点问题,要把库添加到项目中。

https://github.com/TheFrenchLeaf/CMVS-PMVS/tree/master/program/thirdParty

clip_image008

0 0
原创粉丝点击