这是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吗?或者是周围的其他方式?

最佳答案

那取决于你如何获得matches

如果您按以下顺序调用匹配功能:

match(descriptor_for_keypoints1, descriptor_for_keypoints2, matches)

然后queryIdx指的是keypoints1,而trainIdx指的是keypoints2,反之亦然。

关于c++ - OpenCV drawMatches — queryIdx和trainIdx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13318853/

10-12 20:32