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] );
        }
  • 相关阅读:
    Java类加载器总结
    Java程序编译和运行的过程
    Spring+Struts2+Hibernate整合
    Spring+MyBatis+SpringMVC整合
    声明式事务管理
    Scala sbt 添加国内镜像
    持续天数算法
    idea run shell set user name
    java insert mysql 中文乱码
    Samba服务器 安装
  • 原文地址:https://www.cnblogs.com/excellentlhw/p/10778904.html
Copyright © 2011-2022 走看看