最近复现SLAM14讲第7讲关于ORB的代码,特征提取的原理懂了,opencv里的实现方式,特别是如何构造特征点提取函数、描述子函数和暴力匹配等方法的函数不熟悉,因此翻到了《opencv编程入门》第三版了解了解,对整个流程有了个概念。我发现我的opencv版本不能构建fast的描述子,sift更是没有了,sift好像被专利保护了吧。目前只能用ORB了,其他的也暂时用不到,先不管了。
特征提取构造流程
//关键点
FeatureDetector featuredector;
//还可以Ptr构造智能指针型,比较安全,要指定特征点类型
//Ptr<FeatureDector> featuredector = ORB::create();
vector<KeyPoint> keypoints1, ketpoints2;
featuredector.detect(image1,keypoints1);
//描述子
Mat descriptor1, descriptor2;
DescriptorExtractor extractor;
//智能指针构造
Ptr<DescriptorExractor> extractor = ORB::create();
extractor.compute(image1, keypoints1, descriptor1);
//计算距离,通用的方法
Ptr<DescriptorMatcher> mathcer = DescriptorMatcher::create(2);
/*
FLANNBASED = 1,
BRUTEFORCE = 2,
BRUTEFORCE_L1 = 3,
BRUTEFORCE_HAMMING = 4,
BRUTEFORCE_HAMMINGLUT = 5,
BRUTEFORCE_SL2 = 6
*/
//也可以用暴力匹配的名称构造(仅限于BF)
//BFmathcer matcher;
vector<DMatch> matches;
matcher->match(descriptor1,descriptor2, matches);
BruteForce训练
int main()
{
Mat src_image = imread("3.png",0