我想从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;
}
但它不起作用。谁能帮帮我?
最佳答案
DescriptorMatcher 类的match 函数具有以下签名:
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;
}
希望对您有所帮助!
关于c++ - 从 SIFT 的 OpenCV 匹配中获取关键点的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29223441/