【问题标题】:OpenCV drawMatches -- queryIdx and trainIdxOpenCV drawMatches——queryIdx 和 trainIdx
【发布时间】:2012-10-30 09:49:18
【问题描述】:

这是 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&lt;DMatch&gt;。这是DMatch 构造函数:

DMatch(int queryIdx, int trainIdx, float distance)

据推测,queryIdx 是一组关键点的索引,trainIdx 是另一组关键点的索引。

问题:queryIdx 索引到keypoints1trainIdx 索引到keypoints2 是真的吗?或者,是否反过来?

【问题讨论】:

    标签: c++ image-processing opencv computer-vision


    【解决方案1】:

    这取决于你如何获得matches

    如果按顺序调用匹配函数:

    match(descriptor_for_keypoints1, descriptor_for_keypoints2, matches)
    

    那么queryIdx 指的是keypoints1trainIdx 指的是keypoints2,反之亦然。

    【讨论】:

    • 他们应该使功能更清晰。界面和语言不一致。
    • 完全同意。命名非常混乱,文档中没有解释。
    【解决方案2】:

    变量“matches”是DMatch 对象的列表。

    如果我们遍历这个 DMatch 对象列表,那么每个项目将具有以下属性:

    1. item.distance:这个属性为我们提供了描述符之间的距离。距离越短表示匹配越好。
    2. item.trainIdx:该属性为我们提供了列车描述符列表中描述符的索引(在我们的例子中,它是 img2 中的描述符列表)。
    3. item.queryIdx:这个属性为我们提供了查询描述符列表中描述符的索引(在我们的例子中,它是 img1 中的描述符列表)。
    4. item.imgIdx:该属性为我们提供了火车图像的索引。

    【讨论】:

    • 什么是imgIdx?我找不到关于它的讨论。
    • 这里一样,找不到解释 imgIdx 是什么 - 我只比较了两张图片
    • 如何在图像中找到匹配的 Y 坐标?
    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多