2011-10-05 50 views
1

最近,我和机器人项目合作过;我的机器人可以通过其颜色来检测物体,但是我发现对于不同的物体来说不够好。因此,我希望机器人SURF能够实时查看图像,以找到将使用其模板定义的目标对象。SURF如何将模板与原始图像进行匹配?

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

回答

1

有一个很好的例子,要知道如何在OpenCV的目录使用SURF样品目录:OpenCV的/样品/ 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); 

做同样的事情与场景,并使用两个描述符中NN搜索找到他们之间的匹配。 再次,由OpenCV给出的样本应该会帮助你很多:)

+0

非常感谢你的回答,我很有兴趣确定对象在图像中的位置,所以你可以告诉代码可以做到这一点,也是我尝试使用你告诉我的代码可以在opencv示例中找到,但它不工作,除非我注释这两个函数cv :: flann :: Index flann_index(m_image,cv :: flann :: KDTreeIndexParams(4)); //使用4个随机kdtrees flann_index.knnSearch(m_object,m_indices,m_dists,2,cv :: flann :: SearchParams(64)); //最多检查了几张叶子,你能告诉我为什么要这么做吗? – user979779

+0

我真的不明白你的问题。你可以重新格式化你正在谈论的代码,并清除你的意思是“它不工作”。示例或您的代码不起作用? – Turgal

相关问题