【问题标题】:How can I match a template with the original image by SURF?如何将模板与 SURF 的原始图像匹配?
【发布时间】:2011-10-05 06:46:36
【问题描述】:

最近,我参与了机器人项目;我的机器人可以通过颜色检测物体,但我发现对于不同的物体来说不够好。因此,我希望机器人对图像进行实时冲浪,以找到将使用其模板定义的目标对象。

不幸的是,我不知道如何将模板的关键点与其在图像中的图像匹配。

【问题讨论】:

    标签: c++ opencv computer-vision surf object-detection


    【解决方案1】:

    在你的OpenCV目录下的sample目录中有一个很好的例子可以知道如何使用SURF:OpenCV/samples/c/find_obj.cpp

    您需要使用 SURF 描述符(参见第 245-255 行)

    CvSeq *objectKeypoints = 0, *objectDescriptors = 0;
    CvSURFParams params = cvSURFParams(500, 1);
    cvExtractSURF(object, 0, &objectKeypoints, &objectDescriptors, storage, params);
    

    您应该使用 CvSeqReader 读取描述符:

    CvSeqReader reader;
    cvStartReadSeq(descriptors, &reader, 0);
    

    对场景做同样的事情,并使用神经网络搜索中的两个描述符来找到它们之间的匹配。 再次,OpenCV 给出的示例应该对你有很大帮助:)

    【讨论】:

    • 非常感谢您的回答,我很高兴确定对象在图像中的位置,所以您能说出可以做到这一点的代码,我也尝试使用您告诉我的代码可以在opencv 示例,但除非我评论这两个函数 cv::flann::Index flann_index(m_image, cv::flann::KDTreeIndexParams(4)); // 使用 4 个随机 kdtree flann_index.knnSearch(m_object, m_indices, m_dists, 2, cv::flann::SearchParams(64) ); // 检查的最大叶子数,你能告诉我为什么吗?
    • 我真的不明白你的问题。您能否重新格式化您正在谈论的代码并明确您所说的“它不起作用”是什么意思。示例或您的代码不起作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多