J'ai OpenCV 3.0, et je l'ai compilé et installé avec le module opencv_contrib donc ce n'est pas un problème. Malheureusement, les exemples des versions précédentes ne fonctionnent pas avec la version actuelle, et donc bien que cette question ait déjà poséeplus d'une fois je voudrais un exemple plus actuel que je peux réellement travailler avec. Même les exemples officiels ne fonctionnent pas dans cette version (la détection des fonctionnalités fonctionne mais pas d'autres exemples de fonctionnalités) et ils utilisent quand même SURF.
Alors, comment utiliser OpenCV SIFT sur C++? Je veux saisir les points clés dans deux images et les faire correspondre, semblable à cet exemple , mais même obtenir simplement les points et les descripteurs serait assez utile. Aidez-moi!
ensuite:
#include "opencv2/xfeatures2d.hpp"
//
// now, you can no more create an instance on the 'stack', like in the tutorial
// (yea, noticed for a fix/pr).
// you will have to use cv::Ptr all the way down:
//
cv::Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
//cv::Ptr<Feature2D> f2d = xfeatures2d::SURF::create();
//cv::Ptr<Feature2D> f2d = ORB::create();
// you get the picture, i hope..
//-- Step 1: Detect the keypoints:
std::vector<KeyPoint> keypoints_1, keypoints_2;
f2d->detect( img_1, keypoints_1 );
f2d->detect( img_2, keypoints_2 );
//-- Step 2: Calculate descriptors (feature vectors)
Mat descriptors_1, descriptors_2;
f2d->compute( img_1, keypoints_1, descriptors_1 );
f2d->compute( img_2, keypoints_2, descriptors_2 );
//-- Step 3: Matching descriptor vectors using BFMatcher :
BFMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );
n'oubliez pas de lier opencv_xfeatures2d!