我想从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;
}
但它不起作用。任何人都可以帮助我吗?
答案 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;
}
希望有所帮助!