webentwicklung-frage-antwort-db.com.de

wie man SIFT in opencv benutzt

Ich lerne in diesen Tagen C++ und OpenCV. Bei einem Bild möchte ich die SIFT-Funktionen extrahieren. Aus http://docs.opencv.org/modules/nonfree/doc/feature_detection.html können wir wissen, dass OpenCV 2.4.8 das SIFT-Modul enthält. Siehe hier: enter image description here

Aber ich weiß nicht, wie ich damit umgehen soll. Um SIFT zu verwenden, muss ich zunächst die Klasse SIFT aufrufen, um eine SIFT-Instanz zu erhalten. Dann muss ich SIFT::operator()() verwenden, um SIFT auszuführen. 

Was ist aber OutputArray, InputArray, KeyPoint? Könnte jemand eine Demo geben, um zu zeigen, wie man die SIFT-Klasse für SIFT verwendet?

10
tqjustc

Siehe das Beispiel aus Sift-Implementierung mit 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;
}

Getestet auf OpenCV 2.4.8

15
Liam McInroy

update für OpenCV3

#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::Ptr<cv::SiftFeatureDetector> detector = cv::SiftFeatureDetector::create();
    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;
}
1
lbsweek

Ich hatte die gleiche Frage für opencv3, fand aber this . Es wird erläutert, warum SIFT und SURF aus der Standardinstallation von OpenCV 3.0 entfernt wurden und wie SIFT und SURF in OpenCV 3 verwendet werden.

0
Yirga