Visual Studio 2013 Express Visual C++( アンマネージドコード ) OpenCV 3.1 CMake 3.4.3 opencv_contrib-master |
■292.OpenCV SIFTアルゴリズムによる特徴点の検出 | Prev Top Next | |
|
今回はSIFTアルゴリズムを使用した特徴点の検出を行います。ですが、OpenCVの標準機能では使用できないため CMake を使用して機能拡張を行う必要があります。
CMake はコンパイラに依存せずにビルドを自動化するためのフリーソフトウェアです。 まあOpenCV自体がクロスプラットフォームなので機能拡張する場合は、CMakeを使用することになるのでしょう。 さて開発環境の構築手順です。
1.SIFTを使用するためのライブラリのダウンロード 1)GitHubからopencv_contribライブラリをダウンロードして、任意のフォルダに解凍します。 ここでは D:\Program Files 配下に解凍します。
2.CMakeのダウンロード 1)CMakeサイトからCMakeのインストーラーをダウンロードします。2016/04/02現在ではcmake-3.5.1が最新版となります。 cmake-3.5.1-win32-x86.msiをダウンロードします。
3.CMakeのインストール 1)CMakeをインストールします。
4.CMakeによるOpenCVの機能拡張 CMakeの機能拡張はGUIとCUIのいずれかで行います。今回はGUIを使用します。
1)まずはCMakeを起動します。
2)OpenCVのパス指定 Where is the source code: にはOpenCVライブラリのsourcesフォルダパスを指定します。 Where to build the binaries: にはOpenCVライブラリのbuildフォルダパスを指定します。 Configureボタンをクリックします。
3)Visual Studio のバージョン指定 上記のウィンドウが表示されるので、Visual Studio のバージョンを指定して、Finishボタンをクリックします。
4)opencv_contribライブラリのパス指定 Search:に拡張機能の名称を入力します。MODULE と入力すると1行検索されます。ここに拡張モジュールのパスを指定します。 Value に解凍後のopencv_contribライブラリのパスを入力します。
5)Generateボタンをクリックすると build パスに Visual Studio のプロジェクトファイルを作成します。
6)拡張機能のライブラリとdllファイルの作成 buildパス内に INSTALL.vcxproj が作成されていますので、プロジェクトを起動します。
INSTALLをスタートアップ プロジェクトに設定し、ビルドします。結構時間かかるので気長に待ちましょう。
ビルドが完了すると、build\lib\Debugにライブラリファイル、build\bin\Debug にdllファイルが作成されます。これらのファイルを使用して開発を行います。
7)インクルードファイルをコピー D:\Program Files\opencv_contrib-master\modules\xfeatures2d\include\opencv2 配下のファイル一式を D:\Program Files\opencv-3.0.0\build\include\opencv2 にコピーします。
8)ライブラリファイルをコピー D:\Program Files\opencv-3.0.0\build\lib\Debug 配下に作成された opencv_xfeatures2d310d.lib を D:\Program Files\opencv-3.0.0\build\x64\vc12\lib にコピーします。
9)dllファイルをコピー D:\Program Files\opencv-3.0.0\build\bin\Debug 配下に作成されたdllファイルを実行環境にコピーします。 以下のファイルが必要となります。 opencv_core310d.dll opencv_features2d310d.dll opencv_flann310d.dll opencv_imgproc310d.dll opencv_xfeatures2d310d.dll
以上になります。
#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/xfeatures2d.hpp> #pragma comment( lib, "opencv_world310d.lib" ) #pragma comment( lib, "opencv_xfeatures2d310d.lib" ) int main(int argc, const char* argv[]) { int hr = -1; cv::Ptr<cv::xfeatures2d::SIFT> sift; try { cv::Mat src, gray; std::vector<cv::KeyPoint> points; // 画像読み込み src = cv::imread("D:/TEMP/MaverickProj/Image/OpenCV/54/Texture.png", cv::IMREAD_COLOR); // ウィンドウを生成 cv::namedWindow("src", cv::WINDOW_AUTOSIZE); // ウィンドウを表示 cv::imshow("src", src); // グレースケールに変換 cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY); // SIFTオブジェクト作成 sift = cv::xfeatures2d::SiftFeatureDetector::create(); // SIFT実行 sift->detect(src, points, cv::Mat()); // 特徴点描画 cv::drawKeypoints(src, points, src, cv::Scalar(0, 0, 255)); // ウィンドウを生成 cv::namedWindow("SIFT", cv::WINDOW_AUTOSIZE); // ウィンドウを表示 cv::imshow("SIFT", src); cv::waitKey(); hr = 0; } catch (cv::Exception ex) { std::cout << ex.err << std::endl; } sift.release(); // ウィンドウの破棄 cv::destroyAllWindows(); return hr; }元画像
特徴点検出