我正在尝试重写描述here的代码。使用python API for Opencv。
代码的第3步有以下几行:
FlannBasedMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_object, descriptors_scene, matches );
我在the OpenCV reference中反复查看,但发现没有任何内容与python中的FlannBasedMatcher或其他可以完成工作的对象相关。
有什么想法吗?
注意:我使用的是OpenCV 2.3.1和Python 2.6
答案 0 :(得分: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]
答案 1 :(得分:3)
Pythonic FlannBasedMatcher已经在OpenCV主干中可用,但如果我没记错的话,它是在2.3.1发布后添加的。
以下是使用FlannBasedMatcher:http://code.opencv.org/projects/opencv/repository/revisions/master/entry/samples/python2/feature_homography.py
的OpenCV示例答案 2 :(得分:0)
由于缺乏声誉,我无法在上面的帖子中发布无效链接。所以,我将其发布在这里。