페이지

2013년 2월 6일 수요일

Structure from Motion 소스코드 컴파일


mastering opencv with practical computer vision projects 책에 있는 Chapter 4. Exploring Structure from Motion Using OpenCV

Source 코드 컴파일 방법

https://github.com/MasteringOpenCV/code 에서 소스코드 다운로드


컴파일에 필요한 라이브러리
OpenCV v2.3 이상
PCL v1.6 이상
SSBA v3.0 이상 http://www.inf.ethz.ch/personal/chzach/opensource.html

OpenCV, PCL은 무리 없이 설치가 가능한데 SSBA 라이브러리를 컴파일 하는게 조금 번거롭다.


SSBA 소스파일을 다운 받아서
> cmake -G "Visual Studio 9 2008"

명령을 이용하여 프로젝트 파일을 생성할 수 있다. 하지만 이때 2가지 문제가 발생하게 된다.

1. isinf(), isnan() 두가지 함수를 찾을 수 없다는 에러.

그래서 boost 라이브러리를 설치하고 다음을 수정하면 해결
#include <boost/math/special_functions.hpp> //추가
 isinf() -> boost::math::isinf(); //수정

2. SuiteSparse에서 LDL, COLAMD 두가지 라이브러리가 필요하다는 에러.
http://www.cise.ufl.edu/research/sparse/SuiteSparse/
이곳에서 소스코드를 다운 받아서 필요한 2가지 라이브러리만 따로 프로젝트를 만들고 라이브러리를 생성해 주면 된다.

그러면 최종적으로 V3D.lib파일을 만들 수 있다.



Chapter 4. Exploring Structure from Motion Using OpenCV 디렉토리에서
> cmake -G "Visual Studio 9 2008"
실행하고 링크에서 opencv 라이브러리를 버전별로 수정해 주면 해결된다.

opencv_core243.lib opencv_imgproc243.lib opencv_ml243.lib opencv_highgui243.lib opencv_flann243.lib opencv_gpu243.lib opencv_calib3d243.lib opencv_features2d243.lib opencv_video243.lib

Cmmon.cpp에서
HANDLE 이 정의 되어 있지 않다는 에러가 난다면
#include <Windows.h> 을 추가

댓글 4개:

  1. 안녕하세요 ! opencv sfm에 대해서 자료를 찾다가 게시물을 보고 이렇게 글을 남겨봅니다. SSBA 라이브러리를 컴파일하는데 아직 애먹고 있는 상황인지라... 혹시 죄송하지만 왜 안되는지 질문좀 드려도 될까요 ?

    답글삭제
  2. 안녕하세요. 알려주신 방법을 적용해서 최종적으로 Chapter4_StructureFromMotion Project를 빌드하려는데 아래와 같이 link error가 발생하고 있습니다. SparseLevenbergOptimizer::setupSparseJtJ()도 잘 정의되어 있는데도 발생하여 애를 먹고 있는데요. 혹시 아래 문제에 대해서 문의 좀 드려도 될까요?
    1>V3D.lib(v3d_optimization.obj) : error LNK2019: unresolved external symbol _symamd referenced in function "protected: void __thiscall V3D::SparseLevenbergOptimizer::setupSparseJtJ(void)" (?setupSparseJtJ@SparseLevenbergOptimizer@V3D@@IAEXXZ)
    1>V3D.lib(v3d_optimization.obj) : error LNK2019: unresolved external symbol _symamd_report referenced in function "protected: void __thiscall V3D::SparseLevenbergOptimizer::setupSparseJtJ(void)" (?setupSparseJtJ@SparseLevenbergOptimizer@V3D@@IAEXXZ)
    1>D:\Project\3DReconstruction\Source\Chapter4_StructureFromMotion\Debug\Chapter4_StructureFromMotion.exe : fatal error LNK1120: 2 unresolved externals

    답글삭제