OpenCV Python的API:FlannBasedMatcher

9
我将尝试使用OpenCV的Python API重写这里描述的代码。
代码的第三步包含以下行:
 FlannBasedMatcher matcher;
 std::vector< DMatch > matches;
 matcher.match( descriptors_object, descriptors_scene, matches );

我已经在OpenCV参考文档中反复查找,但未找到任何与Python相关的FlannBasedMatcher或其他可执行此工作的对象。

有什么想法吗?

注意:我正在使用OpenCV 2.3.1和Python 2.6。

3个回答

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]

3

感谢您的快速回答。目前,我需要坚持使用2.3.1版本,所以我必须另找一种方法来跟踪功能。 - Esteban Angee

0

链接很好,但如果您能总结一种可能的解决问题的方法,那将更有帮助。 - Shanteshwar Inde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接