实际上在opencv的example里有一个matcher_simple.cpp的文件就实现了SURF的匹配。在做sift matching的时候只要把surf改成sift就可以了。接下来还是先上源码
#include <stdio.h>
#include <core/core.hpp>
#include <features2d/features2d.hpp>
#include <highgui/highgui.hpp>
#include <nonfree/nonfree.hpp>
using namespace cv;
int main(int argc, char ** argv){
Mat img1 = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
Mat img2 = imread(argv[2], CV_LOAD_IMAGE_GRAYSCALE);
Mat img1_mask = imread(argv[3], CV_LOAD_IMAGE_GRAYSCALE);
SiftFeatureDetector detector;
vector<KeyPoint> keypoints1, keypoints2;
detector.detect(img1, keypoints1, img1_mask);
detector.detect(img2, keypoints2);
SiftDescriptorExtractor extractor;
Mat descriptors1, descriptors2;
extractor.compute(img1, keypoints1, descriptors1);
extractor.compute(img2, keypoints2, descriptors2);
BFMatcher matcher(NORM_L2);
vector<DMatch> matches;
matcher.match(descriptors1, descriptors2,