当前位置: 首页>>代码示例>>C++>>正文


C++ Ptr::crossMatch方法代码示例

本文整理汇总了C++中cv::Ptr::crossMatch方法的典型用法代码示例。如果您正苦于以下问题:C++ Ptr::crossMatch方法的具体用法?C++ Ptr::crossMatch怎么用?C++ Ptr::crossMatch使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在cv::Ptr的用法示例。


在下文中一共展示了Ptr::crossMatch方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

  std::vector< cv::DMatch > SequenceAnalyzer::simple_matching(
    cv::Ptr<PointsMatcher> point_matcher,
    cv::Ptr<PointsMatcher> point_matcher1,
    unsigned int mininum_points_matches)
  {
    vector< cv::DMatch > matches_i_j;
    point_matcher->crossMatch( point_matcher1, matches_i_j );

    //First compute points matches:
    unsigned int size_match=matches_i_j.size( );
    vector<cv::Point2f> srcP;
    vector<cv::Point2f> destP;
    vector<uchar> status;

    //vector<KeyPoint> points1 = point_matcher->;
    for( size_t cpt = 0; cpt < size_match; ++cpt ){
      const cv::KeyPoint &key1 = point_matcher1->getKeypoint(
        matches_i_j[ cpt ].queryIdx );
      const cv::KeyPoint &key2 = point_matcher->getKeypoint(
        matches_i_j[ cpt ].trainIdx );
      srcP.push_back( cv::Point2f( key1.pt.x,key1.pt.y ) );
      destP.push_back( cv::Point2f( key2.pt.x,key2.pt.y ) );
      status.push_back( 1 );
    }

    //free some memory:
    point_matcher->clear();
    point_matcher1->clear();

    if( srcP.size()< mininum_points_matches )
      return matches_i_j;
    cv::Mat fundam = cv::findFundamentalMat( srcP, destP, status, cv::FM_RANSAC, 1 );

    unsigned int nbErrors = 0, nb_iter=0;
    //refine the mathing :
    size_match = status.size( );
    for( size_t cpt = 0; cpt < size_match; ++cpt ){
      if( status[ cpt ] == 0 )
      {
        size_match--;
        status[ cpt ] = status[ size_match ];
        status.pop_back( );
        srcP[ cpt ] = srcP[ size_match ];
        srcP.pop_back( );
        destP[ cpt ] = destP[ size_match ];
        destP.pop_back( );
        matches_i_j[ cpt ] = matches_i_j[ size_match ];
        matches_i_j.pop_back( );
        cpt--;
        ++nbErrors;
      }
    }

    if( srcP.size()< mininum_points_matches )
      return matches_i_j;

    //refine the mathing:
    fundam = cv::findFundamentalMat( srcP, destP, status, cv::FM_LMEDS );

    size_match = status.size( );
    for( size_t cpt = 0; cpt < size_match; ++cpt ){
      if( status[ cpt ] == 0 )
      {
        size_match--;
        status[ cpt ] = status[ size_match ];
        status.pop_back( );
        srcP[ cpt ] = srcP[ size_match ];
        srcP.pop_back( );
        destP[ cpt ] = destP[ size_match ];
        destP.pop_back( );
        matches_i_j[ cpt ] = matches_i_j[ size_match ];
        matches_i_j.pop_back( );
        cpt--;
        ++nbErrors;
      }
    }
    return matches_i_j;
  };
开发者ID:Nikitot,项目名称:gsoc2011sfm,代码行数:78,代码来源:SequenceAnalyzer.cpp


注:本文中的cv::Ptr::crossMatch方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。