这是OpenCV的drawMatches()
功能:
void drawMatches(Mat img1, vector<KeyPoint> keypoints1,
Mat img2, vector<KeyPoint> keypoints2,
vector<DMatch> matches,
Mat outImg) //want keypoints1[i] = keypoints2[matches[i]]
请注意,matches
的类型为vector<DMatch>
。这是DMatch
构造函数:
DMatch(int queryIdx, int trainIdx, float distance)
据推测,queryIdx
是一组关键点的索引,trainIdx
是另一组关键点的索引。
问题: queryIdx
索引到keypoints1
和trainIdx
索引到keypoints2
是真的吗?或者,它是相反的吗?
答案 0 :(得分:22)
这取决于你获得matches
的方式。
如果按顺序调用匹配功能:
match(descriptor_for_keypoints1, descriptor_for_keypoints2, matches)
然后queryIdx
引用keypoints1
而trainIdx
引用keypoints2
,反之亦然。
答案 1 :(得分:5)
变量&#34; 匹配&#34;是 DMatch对象的列表。
如果我们迭代这个 DMatch对象列表,那么每个项目将具有以下属性: