• opencv3中SurfFeatureDetector、SurfDescriptorExtractor、BruteForceMatcher的使用


    opencv2中SurfFeatureDetector、SurfDescriptorExtractor、BruteForceMatcher在opencv3中发生了改变。具体如何完成特征点匹配呢?示例如下:

    //寻找关键点

    int minHessian = 700;

    Ptr<SURF>detector = SURF::create(minHessian);

    detector->detect( srcImage1, keyPoint1 );

    detector->detect( srcImage2, keyPoints2 );

    //绘制特征关键点

    Mat img_keypoints_1; Mat img_keypoints_2;

    drawKeypoints( srcImage1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );

    drawKeypoints( srcImage2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT );

    //显示效果图

    imshow("特征点检测效果图1", img_keypoints_1 );

    imshow("特征点检测效果图2", img_keypoints_2 );

    //计算特征向量

    Ptr<SURF>extractor = SURF::create();

    Mat descriptors1, descriptors2;

    extractor->compute( srcImage1, keyPoint1, descriptors1 );

    extractor->compute( srcImage2, keyPoints2, descriptors2 );

    //使用BruteForce进行匹配

    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce");

    std::vector< DMatch > matches;

    matcher->match( descriptors1, descriptors2, matches );

    //绘制从两个图像中匹配出的关键点

    Mat imgMatches;

    drawMatches( srcImage1, keyPoint1, srcImage2, keyPoints2, matches, imgMatches );//进行绘制

    //显示

    imshow("匹配图", imgMatches );

    3.x的特征检测:

    • 算法:SURF,SIFT,BRIEF,FREAK 
    • 类:cv::xfeatures2d::SURF
    1. cv::xfeatures2d::SIFT
    2. cv::xfeatures::BriefDescriptorExtractor
    3. cv::xfeatures2d::FREAK
    4. cv::xfeatures2d::StarDetector
    • 需要进行以下几步
    1. 加入opencv_contrib
    2. 包含opencv2/xfeatures2d.hpp
    3. using namepsace cv::xfeatures2d
    4. 使用create(),detect(),compute(),detectAndCompute()
  • 相关阅读:
    Nginx入门
    Spring基础知识汇总 Java开发必看
    java ArrayList倒序
    1
    js event 的target 和currentTarget
    java 文件的写入和读取
    DOMContentLoaded与load的区别
    JS中先有Object还是先有Function?
    JSON.stringify的三个参数
    Java的泛型约束和限制
  • 原文地址:https://www.cnblogs.com/anqiang1995/p/7398218.html
Copyright © 2020-2023  润新知