Structure From Motion

SfMを勉強しようと思って、この本のChapter 4のソースコードを入手してビルドしようとしてはまったことのメモ。 動作ししてから思い出しながら書いているので抜けがあるかも。

Mastering OpenCV With Practical Computer Vision Projects: Step-by-step Tutorials to Solve Common Real-world Computer Vision Problems for Desktop or Mobile, from Augmented Reality and Number Plate Recognition

Mastering OpenCV With Practical Computer Vision Projects: Step-by-step Tutorials to Solve Common Real-world Computer Vision Problems for Desktop or Mobile, from Augmented Reality and Number Plate Recognition

  • 作者: Daniel Lelis Baggio,Shervin Emami,David Millan Escriva,Khvedchenia Ievgen,Naureen Mahmood
  • 出版社/メーカー: Packt Publishing
  • 発売日: 2012/12/03
  • メディア: ペーパーバック
  • この商品を含むブログ (2件) を見る

テキストに対応したソースコードはここから取得。 MasteringOpenCV/code · GitHub

PCLのビルド(実際にはびるどはしてないけど)

PCLの公式Siteでもall in one packageを用意しているが、 今回使用したVisual Studio 2013用がなかった。 1つ1つコンパイルするの嫌だなぁと思っていたら、VS2013用にall in one packageを作っている方が居たので、 Building Point Cloud Library with Visual Studio 2012/2013/2015 | Summary?Blog

SSBAのビルド

SSBAもビルド。下記を入手し、3rdparty\SSBA-3.0だけビルドして、 Chapter4_StructureFromMotion\3rdparty\SSBA-3.0 としてコピー。 royshil/SfM-Toy-Library · GitHub

SfMのcmake

cmakeで Chapter4_StructureFromMotion のVS2013用ソリューションファイルを作ろうとすると VTK_DIRがないと怒られる。エラーメッセージを見るとPCLのcmakeに書いてあるようなので、 インストールされているフォルダ構成に合わせて下記に修正。 "C:\Program Files (x86)\PCL 1.7.2\cmake\PCLConfig.cmake"

macro(find_VTK)
  if(PCL_ALL_IN_ONE_INSTALLER AND NOT ANDROID)
#    set(VTK_DIR "${PCL_ROOT}/3rdParty/VTK/lib/vtk-5.8")
    set(VTK_DIR "${PCL_ROOT}/3rdParty/VTK/lib/cmake/vtk-6.2")

SfMのビルド

やっと、VS2013用ソリューションファイルができたのでChapter4_StructureFromMotionのビルド。

  • SURFを使っているいくつかのファイルでエラーが出るので下記を追加。場所が移動しているらしい。
#include <opencv2/nonfree/gpu.hpp>
  • ↑と合わせて下記も追加。([ExploringSfMExec]->[プロパティ]->[構成プロパティ]->[リンカー]->[入力]->[追加の依存ファイル])  C:\opencv_2.4.11\opencv\build\x86\vc12\lib\opencv_nonfree2411.lib も追加()。

  • WIN32の手順でファイルを取得するらしいのだが、エラーが出るので下記を追加。 Common.cpp:

#include <windows.h>
  • 最後に異なるバージョンのopencvの混在でもはまった。  自分の環境には2.4.1をインストールしてたんだけど、opencv2.4.2~2.4.11を使うように指示されていたので、2.4.11をインストールした。 そうしたら、cv::imread()で落ちる。理由は、環境変数PATHに2.4.11へのパスより先に2.4.1のパスが書かれていたから。