2017-06-28 22 views
-1

我需要具体了解行for m, n in matches确实能够在C中实现它。matches是一个矩阵,但mn需要采取哪些值以及它们如何移动?这对'm,n在比赛中'是什么?

这是Python代码...

for m, n in matches: 
    if m.distance < 0.75*n.distance: 
     good.append([m]) 

说明在C++ matchesstd::vector<DMatch>并且是OpenCV的程序。

谢谢!

+2

什么是C++版本中'matches'的完整类型?在Python中,'for m,n in matches'表明'matches'是一个可迭代的地方,其中每个元素都是一个元组或列表,其中包含一对值,您在循环中读取为'm'和'n'。那么,在C++版本中,是'vector >','vector >'还是别的? –

+0

针对[Multiple Assignment](https://stackoverflow.com/q/5182573/2823755)的SO问题。 – wwii

+0

我刚才在https://stackoverflow.com/q/44771384上说明了这个问题 – hpaulj

回答

2

我猜你正在使用的knnMatcher和教程以下的http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html

mnDMatch对象。由于k=2

matches = bf.knnMatch(des1,des2, k=2)返回两个对象。

如果增加的k至3的值,则需要

for m,n,p in matches:

捕获结果。

的CPP等效knnmatch的返回DMatch的矢量的矢量如图所示here

事实上,如果打印出来m.queryIdx, m.trainIdx, n.queryIdx, n.trainIdx你会看到指示在查询图像中的相同的索引匹配像264 323 264 490的图案与训练图像中的其他指标进行比较。

+0

感谢您的回复。 =) –

0

mn是通过matches每次迭代出现的值。 “他们如何移动”取决于matches的类型以及它提供的迭代类型。如果它是一个元组列表,那么它们将逐个元素直接向下移动。

相关问题