私はOpenCV 3.0を使用しており、opencv_contribモジュールでコンパイルしてインストールしたので、問題はありません。残念ながら、以前のバージョンの例は現在のバージョンでは機能しないため、この質問には 既に質問されています複数回 実際に動作します。 公式の例 もこのバージョンでは機能せず(機能検出は機能しますが、他の機能例は機能しません)、とにかくSURFを使用します。
それでは、C++でOpenCV SIFTを使用するにはどうすればよいですか? この例 のように、2つの画像のキーポイントを取得して一致させたいのですが、ポイントと記述子を取得するだけでも十分に役立ちます。助けて!
その後:
#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 );
また、opencv_xfeatures2dをリンクすることを忘れないでください!