zoukankan      html  css  js  c++  java
  • OPENCV中特征提取和匹配的步骤

    1.定义特征提取器和描述子提取器:

    cv::Ptr<cv::FeatureDetector> detector;
    cv::Ptr<cv::DescriptorExtractor> descriptor;

    2.设置提取器的类型(ORBSIFTSURF)

    detector=cv::FeatureDetector::create("ORB");
    // 如果使用 sift, surf ,之前要初始化nonfree模块
    // cv::initModule_nonfree();
    // _detector = cv::FeatureDetector::create( "SIFT" );
    // _descriptor = cv::DescriptorExtractor::create( "SIFT" );
    descriptor = cv::DescriptorExtractor::create("ORB");

    3.提取关键点

    vector<cv::KeyPoint> kp1,kp2;//关键点
    detector->detect(rgb1,kp1);//提取关键点
    detector->detect(rgb2,kp2);//提取关键点

    4.计算描述子

    cv::Mat desp1, desp2;
    descriptor->compute( rgb1, kp1, desp1 );
    descriptor->compute( rgb2, kp2, desp2 );

    5.匹配描述子

    vector< cv::DMatch > matches; 
    cv::BFMatcher matcher;
    matcher.match( desp1, desp2, matches );

    6.筛选匹配的特征点(去掉大于最小距离的二倍的匹配点)

    // 筛选匹配,把距离太大的去掉
    // 这里使用的准则是去掉大于2倍最小距离的匹配
        vector< cv::DMatch > goodMatches;
        double minDis = 9999;
        for ( size_t i=0; i<matches.size(); i++ )
        {
            if ( matches[i].distance < minDis )
                minDis = matches[i].distance;
        }for ( size_t i=0; i<matches.size(); i++ )
        {
            if (matches[i].distance < 2*minDis)
                goodMatches.push_back( matches[i] );
        }
  • 相关阅读:
    【nodejs】vscode添加nodejs调试功能
    【nodejs】简单的httpserver
    windows下,强制关闭某端口号的进程
    git 客户端用户名密码配置
    【shell】变量替换
    aksk鉴权
    vue学习笔记-第一课
    好未来上海一面电面
    20190325面试题记录(中级java)
    IT帮-三月份-职业规划主题笔记
  • 原文地址:https://www.cnblogs.com/excellentlhw/p/10778904.html
Copyright © 2011-2022 走看看