2015-12-05 87 views
1

我嘗試比較兩個不同圖像中的兩個點,因此我想將座標轉換爲關鍵點以便稍後使用它們計算描述和匹配結果。如何使用OpenCV將給定座標轉換爲Python中的KAZE關鍵點

我找到了方法:

keypoint = cv2.KeyPoint(x, y, 0) 
vec = [keypoint] 

和它的作品,但作爲結果我得到每次:

>>>akaze.compute(image, vec) 
([], None) 

即使當我把檢測到的關鍵點,將它們轉換爲座標,然後返回到關鍵點(使用上面的結構)我得到相同的結果。

那麼,如何將給定的座標轉換爲關鍵點(例如KAZE關鍵點)? 非常感謝!

問候, 利奧

+0

在C++中,您可以使用[KeyPoint :: convert](http://docs.opencv.org/master/d2/d29/classcv_1_1KeyPoint.html#ab6a67a0ab17d65a1b28502eba424bfde)。還應該有Python綁定到這個。 – Miki

回答

1

您使用尺寸創建關鍵點的主要問題。據documentationKeyPoint構造簽名需要3個參數:Xÿ座標和大小(這是關鍵點直徑)。您將此大小設置爲零。

因此,第一個變化是設置關鍵點直徑,即。即我推測,這應該工作:

keypoint = cv2.KeyPoint(x, y, 5)

但事實並非如此。原因在於OpenCV關鍵點描述符計算機不接受使用默認值class_id-1)的關鍵點。真的,我不知道什麼是實際類標識碼目的(見discussion),但我把它改爲零,只是因爲akaze.detect(...)方法在這個領域(即的第一個關鍵點關鍵點返回的數量,的第二個等等)。由於相同的原因,我還將大小的值設置爲 - 這些檢測點的值是從大約4.85.7

這些修改後,一切都變好了,我。即驗證碼:

keypoints = [cv2.KeyPoint(x, y, 5, _class_id=0)] 
akaze = cv2.AKAZE_create("AKAZE") 
akaze.compute(image, keypoints) 

給了我的情況(OpenCV的3.0.0)正確的結果。我想這對於2.4.x版本來說也是可以的。

+0

非常感謝,這工作得很好!這幫助了我很多。 – Leo

相關問題