2017-03-24 7 views
1

私はかなり新しいOpenCVです。私はthis tutorialの画像の中のオブジェクトを検索して、コードをうまく実行することができました。ORB、Fast、Brsik、OpenCv 3.2などの機能記述子を使用

検索しているうちに、フィーチャマッチング用にmore options(例:Fast、またはBRISK)があることがわかりました。だから私はSURFとは異なる記述子を試してみることにしました。

しかし、私は問題を抱えています。別の記述子を作成するにはどうすればよいですか?誰かが助けてもらえますか?OpenCV3.2のコード例がありますか? :)

これは私が検索中に見つけたlinkですが、悲しいことにOpenCV 3.2ではありません。

+0

OpenCVで提供されているサンプルを見ましたか? http://stackoverflow.com/a/14986422/6331998 – m3h0w

答えて

2

OpenCV 3では、一貫した機能検出APIが導入されました。

つまり、すべてのフィーチャディテクタは、静的なcreate()メソッドを実装しています。このメソッドは、cv :: Ptrをそれぞれのディテクタに返します。

Default descriptors

:あなたは、最新のドキュメントであるOpenCVのの検出器のそれぞれを使用することができます。このサンプルに続き

#include <iostream> 
#include <vector> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/features2d.hpp> 
#include <opencv2/xfeatures2d.hpp> 


int main(int argc, char *argv[]) 
{ 
    if(argc > 1) { 
     cv::Mat img = cv::imread(argv[1], cv::ImreadModes::IMREAD_GRAYSCALE); 
     if(!img.empty()) { 
      cv::Ptr<cv::xfeatures2d::SiftFeatureDetector> siftDetector = cv::xfeatures2d::SiftFeatureDetector::create(); 
      cv::Ptr<cv::BRISK> briskDetector = cv::BRISK::create(); 

      std::vector<cv::KeyPoint> siftKeypoints; 
      std::vector<cv::KeyPoint> briskKeypoints; 

      siftDetector->detect(img, siftKeypoints); 
      briskDetector->detect(img, briskKeypoints); 

      std::cout << "Detected " << siftKeypoints.size() << " SIFT keypoints." << std::endl; 
      std::cout << "Detected " << briskKeypoints.size() << " BRISK keypoints." << std::endl; 
      return 0; 
     } else { 
      std::cout << "Unable to load image, aborting." << std::endl; 
      return -1; 
     } 
    } 
    std::cout << "A path to an (image) file is missing." << std::endl; 
    return -1; 
} 

:ここ

は説明した動作を示して簡単な例です

Non-free descriptors

Experimental descriptors

+0

ありがとう!それはまさに私が探していたものです:) – Drian

+0

喜んで私はこれで助けることができました。問題が解決したら、その答えを受け入れることを検討してください。 – s1h

+1

恐ろしい答え。 – XoXo

関連する問題