从SIFT的OpenCV匹配中获取关键点的坐标

时间:2015-03-24 01:25:16

标签: c++ opencv sift

我想从SIFT的OpenCV匹配中获取关键点的坐标,我不知道匹配数据结构的注释。我一直试图这样做:

vector<DMatch> matches;
matcher.match(descriptors1,descriptors2,matches);
for(vector<DMatch>::size_type i=0; i<matches.size(); i++)
{
    cout<< key_points1[ matches[i].trainIdx].pt <<"与之匹配特征点坐标"<< key_points2[ matches[i].imgIdx].pt<<endl; 
}

但它不起作用。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

DescriptorMatcher 匹配函数具有以下签名:

void match( const Mat& queryDescriptors, const Mat& trainDescriptors,
            vector<DMatch>& matches, const Mat& mask=Mat() ) const;

我假设 key_points1 对应 descriptors1 key_points2 对应 descriptors2

首先要考虑的是将 descriptors1 作为 queryDescriptors 传递,然后使用 trainIdx 作为索引。你可能不得不在那里使用 queryIdx 因此,对于 key_points2 ,您必须使用 trainIdx

vector<DMatch> matches;
matcher.match(descriptors1,descriptors2,matches);
for(vector<DMatch>::size_type i=0; i<matches.size(); i++)
{
  cout<< key_points1[ matches[i].queryIdx].pt // Query is first.
      <<"与之匹配特征点坐标"
      << key_points2[ matches[i].trainIdx].pt // Training is second.
      <<endl; 
}

希望有所帮助!