windows下PTAM的編譯
前些日子在研究PTAM,以下首先說說PTAM的編譯過程,我在XP幾WIN7搭配vs2010中均已測試過,都能夠執行。
首先下載編譯PTAM所必須的庫文件。下載地址我會給出
PTAM(PTAM.zip)http://www.robots.ox.ac.uk/~gk/PTAM/
GLEW(glew-1.5.0-win32.zip)http://glew.sourceforge.net/
Lapack and BLAS (shared-libs.zipとheaders.tar.gz)http://www.fi.muni.cz/~xsvobod2/misc/lapack/
pthreads (pthreads-w32-2-8-0-release.exe)
libjpeg for win32 (jpeg-6b-4.exe)http://gnuwin32.sourceforge.net/packages/jpeg.htm
fltk(fltk-2.0.x-r6305.tar.bz2) http://www.fltk.org/index.php
若是無法在上述網頁中找到所須要的安裝包。能夠在http://download.csdn.net/detail/cgf_909/7175757下載PTAM的源程序,在http://download.csdn.net/detail/cgf_909/7249657下載到GLEW,Lapack and BLAS。
接下來我們對以上五個庫進行配置,配置這五個庫是為了編譯TooN, libcvd, gvars3這三個庫,而這三個庫是編譯PTAM所必須的庫文件
1、將下載下來的GLEW解壓後。把bin/glew32.dll放到c盤Windows/system32中。把lib/glew32.lib放到{VC 的根文件夾}vc/Lib中。把include/GL/glew.h放到{VC 根文件夾}/Include/GL中。把include/GL/wglew.h放到{VC Root}/Include/GL中。
2、加壓LAPACK
AND BLAS把blas_win32.dll和lapack_win32.dll放到Windows/system32中。blas_win32.lib和lapack_win32.lib放到{VC
根文件夾}/Lib中。將
3、把pthreads-w32-2-8-0-release.exe解壓得到Pre-built.2、pthreads.2、QueueUserAPCEx這三個目錄。把Pre-built.2/include下的semaphore.h、sched.h、pthread.h這三個頭文件放到{VC 根文件夾}/Include中。將Pre-built.2/lib下的lib文件放到{VC 根文件夾的}/Lib中,在把這個裏面的dll文件放到Windows/system32中。
4、執行jpeg-6b-4.exe。把他安裝到默認路徑。安裝完畢後在(C:/Program Files/GnuWin32/include和C:/Program Files/GnuWin32/lib)
把include文件和lib文件分別復制到vc根文件夾的include和lib中去。
5、將fltk-2.0.x-r6305.tar.bz2演說包解壓、然後它作為一個頭文件放到{VC Root}/Include中。
接下來我們須要編譯TooN。 libcvd, gvars3這三個庫,這三個庫的下載地址為http://download.csdn.net/detail/cgf_909/7175721
1、首先是TooN的編譯,我們把解壓後的TooN作為一個頭文件包括到vc根文件夾的include中就可以
2、對libcvd的編譯,解壓libcvd文件執行其下build/vc2005中的project,執行會錯誤發生。解決的方法:
把包括在vc根文件夾中include下的TooN頭文間中的toon/internal/config.hh打開,其它代碼均屏蔽掉僅僅保留#define TOON_USE_LAPACK 1 這一行,
再次編譯libcvd可發現編譯通過,生成一lib目錄,把lib目錄下的lib庫放置vc根目錄的lib中。然後再把cvd作為一頭文件
放到{VC Root}/Include中。
3、解壓gvars3執行build/vc2005中的project。會錯誤發生。解決的方法:移除該project中GUI_Fltk2.h,和GUI_Fltk2.cc,
然後在gvars3文件夾下創建config.h文件:
#ifndef GVARS3_INCLUDE_CONFIG_H
#define GVARS3_INCLUDE_CONFIG_H
#define GVARS3_HAVE_TOON 1
#endif
又一次編譯可通過,生成了一lib目錄,把該目錄下的lib文件放置{VC Root}/Lib中。然後把gvars3下的gvars3作為一頭文件放置{VC Root}/Include中
在這些都配置好後,我們就能夠來編譯PTAM程序了
在PTAM中包括兩個部分,一個是相機的校準部分。一個是PTAM的主體部分。
首要要對相機進行校準得到相機的參數才幹執行PTAM的主體部分。我們在建立PTAMproject之後。
在project的屬性-c/c++-code generation-runtime library中選擇MTD,多線程調試,在project屬性-Linker-input-addition Dependencies
增加這些外部依賴項
OpenNI.lib
glew32.lib
libcvdd.lib
gvars3d.lib
opengl.lib
pthreadVC2.lib
lapack_win32_MTd.lib
blas_win32_MTd.lib
然後把SymEigen.h文件裏的
ev = makeVector(A_plus_B, -A_plus_B/2 + A_minus_B * sqrt(3)/2, -A_plus_B/2 -
A_minus_B * sqrt(3)/2) - Ones * a/3;
改為
ev = makeVector(A_plus_B, -A_plus_B/2 + A_minus_B * sqrt(3.0)/2.0, -A_plus_B/2 -
A_minus_B * sqrt(3.0)/2.0) - Ones * a/3;
編譯project可執行成功。
這裏還須要註意一下。PTAM中從相機中讀入視頻幀的程序是靠我們自己來寫的,即針對VideoSource.h這個頭文件,我們沒有相應的cpp文件對其進行實現,所以我們得依據自己所用的不同攝像頭。來對其進行實現。
windows下PTAM的編譯