以下程序来自OpenCV自带的例程:
- #include "stdafx.h"
- #include <stdio.h>
- #include "opencv2/core/core.hpp"
- #include "opencv2/features2d/features2d.hpp"
- #include "opencv2/highgui/highgui.hpp"
- #include "opencv2/nonfree/nonfree.hpp"
- using namespace cv;
- void help()
- {
- printf("\nThis program demonstrates using features2d detector, descriptor extractor and simple matcher\n"
- "Using the SURF desriptor:\n"
- "\n"
- "Usage:\n matcher_simple <image1> <image2>\n");
- }
- int main(int argc, char** argv)
- {
- //if(argc != 3)
- //{
- // help();
- // return -1;
- //}
- Mat img1 = imread("H:\\OpenCV2.4\\opencv\\samples\\c\\box.png");//(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
- Mat img2 = imread("H:\\OpenCV2.4\\opencv\\samples\\c\\box_in_scene.png");//(argv[2], CV_LOAD_IMAGE_GRAYSCALE);
- if(img1.empty() || img2.empty())
- {
- printf("Can't read one of the images\n");
- return -1;
- }
- // detecting keypoints
- //检测关键点
- SurfFeatureDetector detector(400);
- vector<KeyPoint> keypoints1, keypoints2;
- detector.detect(img1, keypoints1);
- detector.detect(img2, keypoints2);
- // computing descriptors
- // 计算描述器
- SurfDescriptorExtractor extractor;
- Mat descriptors1, descriptors2;
- extractor.compute(img1, keypoints1, descriptors1);
- extractor.compute(img2, keypoints2, descriptors2);
- // matching descriptors
- //匹配描述器
- BFMatcher matcher(NORM_L2);
- vector<DMatch> matches;
- matcher.match(descriptors1, descriptors2, matches);
- // drawing the results
- // 画结果
- namedWindow("matches", 1);
- Mat img_matches;
- drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches);
- imshow("matches", img_matches);
- waitKey(0);
- return 0;
- }
此例程比较简单不做深入解释。
转载自 http://blog.csdn.net/hjh2005/article/details/7610794