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

以上になります。


---main.cpp---

#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;
}

元画像

特徴点検出


Prev Top Next
inserted by FC2 system