2014-03-28 5 views
8

Ich lerne C++ und OpenCV in diesen Tagen. Bei einem Bild möchte ich seine SIFT-Funktionen extrahieren. Von http://docs.opencv.org/modules/nonfree/doc/feature_detection.html können wir wissen, dass OpenCV 2.4.8 das SIFT-Modul hat. Siehe hier: enter image description herewie SIFT in opencv zu verwenden

Aber ich weiß nicht, wie man es benutzt. Zur Verwendung von SIFT muss ich zuerst die Klasse SIFT aufrufen, um eine SIFT-Instanz zu erhalten. Dann muss ich SIFT::operator()() verwenden, um SIFT zu machen.

Aber was ist OutputArray, InputArray, KeyPoint? Kann jemand eine Demonstration geben, um zu zeigen, wie man SIFT Klasse benutzt, um SIFT zu machen?

+1

vielleicht eines der [tutorials] (http://docs.opencv.org/doc/tutorials/ features2d/feature_detection/feature_detection.html # feature-detection) ist hilfreich? – berak

+0

@berak ist es SurfFeatureDetector, nicht SIFT. Aber was ich verwenden möchte, ist Klasse SIFT. Ich zeige es in dem Link. Vielen Dank ! – tqjustc

+2

ja, ich weiß. aber das Verfahren ist ähnlich – berak

Antwort

13

Siehe das Beispiel von 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; 
} 

auf OpenCV Getestet 2.4.8

+3

Brauchen Sie '#include" opencv2/nonfree/features2d.hpp "'? –

+1

@Alessandro Ach ja, check edits –

1

ich die gleiche Frage für opencv3 mit, aber ich fand this. Es erklärt, warum SIFT und SURF aus der Standardinstallation von OpenCV 3.0 entfernt wurden und wie man SIFT und SURF in OpenCV 3 verwendet.

Verwandte Themen