数度のトライを経て、OpenCVのバージョン3.3.0でやっとsfmモジュールのビルドが通ったわけです。

ようやくサンプルを試す段階に来た。参考にしてるQiita記事の後編へやっと進める。↓
http://qiita.com/ChaoticActivity/items/178d23508b92a09e59ea
記事によると、サンプルを動かすためにまたいくつか手を加える必要がある(笑)
ヘッダーファイルの修正
さて、opencv_contrib-3.3.0/modules/sfm/samples以下にあるsfmのサンプルをそのままビルドしようとすると
reconstruct()が定義されていません
的なエラーが出る。
このエラーの理由は、いくつかのヘッダーファイルで
#if CERES_FOUND
という条件マクロが書かれており、Ceres-Solverの有無でincludeするファイルを選択しているから。なので、この条件がtrueになるようにコンパイラにCeres-Solverが存在することを知らせる必要がある。
で、ちょっと行儀が悪いけど、オイラはもうinclude/opencv2/sfm.hppの冒頭の以下の記述を
#ifndef __OPENCV_SFM_HPP__ #define __OPENCV_SFM_HPP__ #include <opencv2/sfm/conditioning.hpp> #include <opencv2/sfm/fundamental.hpp> #include <opencv2/sfm/numeric.hpp> #include <opencv2/sfm/projection.hpp> #include <opencv2/sfm/triangulation.hpp> #if CERES_FOUND #include <opencv2/sfm/reconstruct.hpp> #include <opencv2/sfm/simple_pipeline.hpp> #endif
直接以下のように編集しちゃいました。
#ifndef __OPENCV_SFM_HPP__ #define __OPENCV_SFM_HPP__ #include#include #include #include #include #include #define CERES_FOUND 1 #if CERES_FOUND #include #include #endif
サンプルコードの実行
参考記事に倣ってtrajectory_reconstruccion.cppを実行してみる。
おお、特にエラーも無く動作したぞ!


サンプルコードのバグ修正
参考記事によると、このサンプルコードにはバグがあるというか、カメラの軌跡を表示する際に使用しているcv::viz::WTrajectoryに渡す引数が間違っているらしい。
以下の部分を
/// Recovering cameras
cout << "Recovering cameras ... ";
vector<Affine3d> path_est;
for (size_t i = 0; i < Rs_est.size(); ++i)
path_est.push_back(Affine3d(Rs_est[i],ts_est[i]));
cout << "[DONE]" << endl;
逆行列に変えて以下のようにすると正しい座標変換になる。
/// Recovering cameras
cout << "Recovering cameras ... ";
vector<Affine3d> path_est;
for (size_t i = 0; i < Rs_est.size(); ++i)
path_est.push_back(Affine3d(Rs_est[i], ts_est[i]).inv());
cout << "[DONE]" << endl;
別のサンプルコード
調子に乗ってscene_reconstruction.cppも動かしてみようと思ったら見事エラー…
http://docs.opencv.org/3.3.0/d4/d18/tutorial_sfm_scene_reconstruction.html
え、正しいコマンドライン引数が良く分からんぞ。。。
関連記事
MRenderUtil::raytrace
Raspberry PiでIoTごっこ
OpenMayaのPhongShaderクラス
顔検出・認識のAPI・ライブラリ・ソフトウェアのリスト
Alice Vision:オープンソースのPhotogram...
Unity ARKitプラグインサンプルのドキュメントを読む
疑似3D写真が撮れるiPhoneアプリ『Seene』がアップ...
OpenMVS:Multi-View Stereoによる3次...
CGのためのディープラーニング
Math.NET Numerics:Unityで使える数値計...
OpenCV バージョン4がリリースされた!
手を動かしながら学ぶデータマイニング
Google Colaboratoryで遊ぶ準備
Swark:コードからアーキテクチャ図を作成できるVSCod...
python-twitterで自分のお気に入りを取得する
立体視を試してみた
RSSフィードを読込んで表示するWordpressプラグイン...
Pythonの自然言語処理ライブラリ『NLTK(Natura...
Mitsuba 2:オープンソースの物理ベースレンダラ
ドットインストールのWordPress入門レッスン
Unityで学ぶC#
このブログのデザインに飽きてきた
Mean Stack開発の最初の一歩
AndroidもopenGLも初心者さ (でもJavaは知っ...
SSD (Single Shot Multibox Dete...
動的なメモリの扱い
今年もSSII
Raspberry Pi
定数
WinSCP
PSPNet (Pyramid Scene Parsing ...
Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『...
Unityの各コンポーネント間でのやり取り
Google XML Sitemap Generatorプラ...
Blender 2.8がついに正式リリース!
TensorFlowでCGを微分できる『TensorFlow...
OpenFace:Deep Neural Networkによ...
html5のcanvasの可能性
Unityの薄い本
OpenCVの超解像(SuperResolution)モジュ...
Multi-View Environment:複数画像から3...
Structure from Motion (多視点画像から...


コメント