2014-04-08 54 views
1

我已經使用OpenCV實現了一個密度特徵檢測器,其中一個答案爲question查找OpenCV密集圖像之間的匹配SIFT

sift = cv2.SIFT() 
dense=cv2.FeatureDetector_create("Dense") 
kp1=dense.detect(template_detect) 
des1=sift.compute(template_detect,kp1) 
kp2=dense.detect(image_detect) 
des2=sift.compute(image_detect,kp2) 

它運作良好,但是,我有興趣比較這兩個圖像,試圖找到它們之間的匹配。然而,當試圖像下面那樣實現它時,我得到錯誤「TypeError:queryDescriptors不是數字元組」。

bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True) 
matches = bf.match(des1,des2) 
matches = sorted(matches, key = lambda x:x.distance) 
img3 = cv2.drawMatches(template_detect,kp1,image_detect,kp2,matches[:4], 2, None) 

有沒有更好的方法,我應該試圖實現圖像之間的關鍵點匹配?

回答

1

您現在可能已經下跌了,但錯誤是signature for compute()

Python: cv2.SIFT.compute(image, keypoints[, descriptors]) → keypoints, descriptors

您的代碼分配DES1/DES2與關鍵點和描述符兩者的元組,這是不是有什麼你要。更正你的代碼將是;

sift = cv2.SIFT() 
dense=cv2.FeatureDetector_create("Dense") 
kp1=dense.detect(template_detect) 
_, des1=sift.compute(template_detect,kp1) 
kp2=dense.detect(image_detect) 
_, des2=sift.compute(image_detect,kp2) 

這會從返回中刪除關鍵點。

相關問題