2011-11-28 81 views
8

我想重寫描述here的代碼。使用Opencv的python API。OpenCV Python的API:FlannBasedMatcher

代碼的第3步中有這樣幾行:

FlannBasedMatcher matcher; 
std::vector<DMatch> matches; 
matcher.match(descriptors_object, descriptors_scene, matches); 

我已經看過一遍又一遍在the OpenCV reference但一無所獲在Python或其他對象可以做的工作涉及到FlannBasedMatcher。

任何想法?

注:我usign OpenCV的2.3.1和Python 2.6

回答

10

在通過的OpenCV 2.3.1 python2文件夾下提供的實施例來看,我發現了一個基於FLANN匹配功能的實現,其不依賴於FlanBasedMatcher對象上。

下面是代碼:

FLANN_INDEX_KDTREE = 1 # bug: flann enums are missing 

flann_params = dict(algorithm = FLANN_INDEX_KDTREE, 
        trees = 4) 

def match_flann(desc1, desc2, r_threshold = 0.6): 
    flann = cv2.flann_Index(desc2, flann_params) 
    idx2, dist = flann.knnSearch(desc1, 2, params = {}) # bug: need to provide empty dict 
    mask = dist[:,0]/dist[:,1] < r_threshold 
    idx1 = np.arange(len(desc1)) 
    pairs = np.int32(zip(idx1, idx2[:,0])) 
    return pairs[mask] 
2

Python化FlannBasedMatcher是OpenCV的樹幹已經上市,但如果我沒有記錯,之後2.3.1版本中加入。

下面是使用FlannBasedMatcher OpenCV的樣品:http://code.opencv.org/projects/opencv/repository/revisions/master/entry/samples/python2/feature_homography.py

+0

感謝您的快速答覆。在這個時候,我需要堅持2.3.1版本,所以我必須找到自己的另一種方式來跟蹤功能。 –

+1

鏈接已停止 –

+0

鏈接已修復。 –