c – OpenCV DescriptorMatcher radiusMatch和knnMatch结果格式

前端之家收集整理的这篇文章主要介绍了c – OpenCV DescriptorMatcher radiusMatch和knnMatch结果格式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人碰巧知道为什么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>中匹配.没有第二个矢量.

猜你在找的C&C++相关文章