加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – OpenCV DescriptorMatcher radiusMatch和knnMatch结果格式

发布时间:2020-12-16 03:12:47 所属栏目:百科 来源:网络整理
导读:有人碰巧知道为什么OpenCV 2 DescriptorMatcher :: radiusMatch()和knnMatch()取向量 vector DMatch火柴?我有点困惑,为什么它不会只是一个向量,因为它只是一个点阵数在场景中对应的训练形象,对吧? 我有这样的东西: void getMatchingPoints( const vectorv
有人碰巧知道为什么OpenCV 2 DescriptorMatcher :: radiusMatch()和knnMatch()取向量< vector< DMatch>&火柴?我有点困惑,为什么它不会只是一个向量,因为它只是一个点阵数在场景中对应的训练形象,对吧?

我有这样的东西:

void getMatchingPoints(
    const vector<vector<cv::DMatch> >& matches,const vector<cv::KeyPoint>& keyPtsTemplates,const vector<cv::KeyPoint>& keyPtsScene,vector<Vec2f>& ptsTemplate,vector<Vec2f>& ptsScene
    )
{
    ptsTemplate.clear();
    ptsScene.clear();

    for (size_t k = 0; k < matches.size(); k++)
    {
        for (size_t i = 0; i < matches[k].size(); i++)
        {
            const cv::DMatch& match = matches[k][i];
            ptsScene.push_back(fromOcv(keyPtsScene[match.queryIdx].pt));
            ptsTemplate.push_back(fromOcv(keyPtsTemplates[match.trainIdx].pt));
        }
    }
}

但我有点困惑,如何实际映射大约.一旦我把它们全部放在ptsScene中,对象的位置.当我画画时,点数似乎分散在我身上,所以我想我错过了嵌套向量所代表的东西.

解决方法

knnMatch函数将返回k个近邻匹配,即如果调用knnMatch(queryDescriptors,trainDescriptors,matchesQueryToTrain,3),在这种情况下k = 3,则对于每个训练点,它将从查询中找到3个最佳匹配项组.

根据您的向量< vector< DMatch>>,这意味着外部向量是每个查询 – >列车匹配的向量,并且内部向量是您的k个最近匹配的向量.

有一个很好的例子,如何使用这些k个匹配以及一个交叉检查方法在this其他问题.

如果你想要一个简单的1-1匹配,那么你可以使用k = 1调用knnMatch,这将返回大小为1的内部向量,或者只是调用匹配哪个输出在格式向量< DMatch>中匹配.没有第二个矢量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读