2014-03-28 3 views
8

В настоящее время я изучаю C++ и OpenCV. Учитывая изображение, я хочу извлечь его функции SIFT. От http://docs.opencv.org/modules/nonfree/doc/feature_detection.html мы можем знать, что OpenCV 2.4.8 имеет модуль SIFT. См. Здесь: enter image description hereКак использовать SIFT в opencv

Но я не знаю, как его использовать. В настоящее время для использования SIFT мне нужно сначала вызвать класс SIFT, чтобы получить экземпляр SIFT. Затем мне нужно использовать SIFT::operator()(), чтобы сделать SIFT.

Но что такое OutputArray, InputArray, KeyPoint? Может ли кто-нибудь дать демо, чтобы показать, как использовать класс SIFT для выполнения SIFT?

+1

Возможно, один из [учебников] (http://docs.opencv.org/doc/tutorials/ feature2d/feature_detection/feature_detection.html # функция-обнаружение) полезно? – berak

+0

@berak SurfFeatureDetector, не SIFT. Но я хочу использовать класс SIFT. Я показываю его по ссылке. Благодаря ! – tqjustc

+2

да, я знаю. но процедура похожа на – berak

ответ

13

Смотрите пример из Sift implementation with OpenCV 2.2

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/nonfree/features2d.hpp> //Thanks to Alessandro 

int main(int argc, const char* argv[]) 
{ 
    const cv::Mat input = cv::imread("input.jpg", 0); //Load as grayscale 

    cv::SiftFeatureDetector detector; 
    std::vector<cv::KeyPoint> keypoints; 
    detector.detect(input, keypoints); 

    // Add results to image and save. 
    cv::Mat output; 
    cv::drawKeypoints(input, keypoints, output); 
    cv::imwrite("sift_result.jpg", output); 

    return 0; 
} 

протестирована на OpenCV 2.4.8

+3

Вам не нужно '#include 'opencv2/nonfree/features2d.hpp"?? –

+1

@Alessandro Ах да, проверьте изменения –

1

у меня был тот же самый вопрос для opencv3, но я нашел this. Это объясняет, почему SIFT и SURF удалены из стандартной установки OpenCV 3.0 и как использовать SIFT и SURF в OpenCV 3.

Смежные вопросы