我需要具体了解行for m, n in matches
能够在C中实现它的内容。matches
是一个矩阵,但m
和n
的值是什么采取什么,他们如何移动?
这是python代码......
for m, n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
注意在C ++中matches
是std::vector<DMatch>
并且是OpenCV程序。
谢谢!
答案 0 :(得分:2)
我猜你正在使用knnMatcher并按照http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html上的教程
m
和n
是DMatch
个对象。返回两个对象,因为{/ 1}}位于
k=2
。
如果将matches = bf.knnMatch(des1,des2, k=2)
的值增加到3,则需要
k
捕获结果。
knnmatch的CPP等价物返回DMatch矢量向量,如图所示here
事实上,如果你打印for m,n,p in matches:
,你会看到像m.queryIdx, m.trainIdx, n.queryIdx, n.trainIdx
这样的模式,表明查询图像中的相同索引与训练图像中的其他索引相匹配。
答案 1 :(得分:0)
m
和n
是每次迭代matches
中出现的值。 &#34;他们如何移动&#34;取决于matches
的类型以及它提供的迭代类型。如果它是一个元组列表,那么它们将逐个元素地逐个向下移动。