2017-06-28 27 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的類型以及它提供的迭代類型。如果它是一個元組列表,那麼它們將逐個元素直接向下移動。

相關問題