как использовать SIFT в opencv

Я изучаю C ++ и OpenCV в эти дни. Учитывая изображение, я хочу извлечь его функции SIFT. От http://docs.opencv.org/modules/nonfree/doc/feature_detection.html, мы можем знать, что OpenCV 2.4.8 имеет модуль SIFT.
Посмотреть здесь:
введите описание изображения здесь

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

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

10

Решение

Смотрите пример из Просеять реализацию с 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

15

Другие решения

обновление для 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

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

0
По вопросам рекламы [email protected]