2017-03-24 11 views
1

저는 OpenCV에 새로 입문했습니다. 그림에서 객체를 검색하기 위해 this tutorial을 따라 갔고 코드를 성공적으로 실행할 수있었습니다. 내가 검색하는 동안 OpenCv 3.2와 함께 ORB, Fast, Brsik과 같은 기능 설명자를 사용합니다.

, 나는 기능 매칭을위한 more options (예를 들어, Fast, ORB 또는 BRISK)이있는 것을 보았다. 그래서 SURF과 다른 설명자를 사용하기로했습니다.

하지만 문제가 있습니다. 다른 설명자를 만들려면 어떻게해야합니까? 누군가 OpenCV3.2의 코드 예제를 통해 나를 도울 수 있습니까? :)

이것은 검색 중에 발견 한 link이지만, 슬프게도 OpenCV 3.2은 아닙니다.

+0

OpenCV와 함께 제공되는 예제를 보았습니까? http://stackoverflow.com/a/14986422/6331998 – m3h0w

답변

2

OpenCV 3에서는 일관된 기능 감지 API가 도입되었습니다.

즉, 모든 피쳐 탐지기는 cv :: Ptr를 각각의 탐지기로 반환하는 정적 create() 메소드를 구현합니다.

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