在OpenCV中使用SIFT、SURT等需要头文件#include <opencv2/nonfree/nonfree.hpp>
同时需要初始化模块 initModule_nonfree();
通过定义FeatureDetector的对象可以使用多种特征检测方法。
Ptr<FeatureDetector> FeatureDetector::create(const string& detectorType);
detectorType包括:
“FAST” – FastFeatureDetector
“STAR” – StarFeatureDetector
“SIFT” – SIFT (nonfree module)
“SURF” – SURF (nonfree module)
“ORB” – ORB
“MSER” – MSER
“GFTT” – GoodFeaturesToTrackDetector
“HARRIS” – GoodFeaturesToTrackDetector with Harris detector enabled
“Dense” – DenseFeatureDetector
“SimpleBlob” – SimpleBlobDetector
通过定义DescriptorExtractor的对象创建特征向量生成器
Ptr<DescriptorExtractor>descriptor_extractor = DescriptorExtractor::create(const string& detectorType)
通过定义DescriptorMatcher的对象创建特征匹配器
Ptr<DescriptorMatcher>descriptor_matcher = DescriptorMatcher::create(const string& detectorType)
对应float类型的匹配有:“FlannBased”,“BruteForce“<L2>,"BruteForce-SL2<SL2>,
“BruteForce-L1”<L1>。
对应uchar类型的匹配方式有:“BruteForce-Hamming”,“BruteForce-HammingLUT”。
画出特征点
CV_EXPORTS void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints