OpenCV Python的API:FlannBasedMatcher

9 投票
3 回答
11014 浏览
提问于 2025-04-17 07:15

我正在尝试用Python的OpenCV库重写这里描述的代码,链接在这里

代码的第3步有以下几行:

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

我反复查看了OpenCV的参考文档,但没有找到与FlannBasedMatcher相关的内容,或者其他可以完成这个工作的对象。

有没有什么想法?

注意:我使用的是OpenCV 2.3.1和Python 2.6。

3 个回答

0

我因为没有足够的声望,无法在上面的帖子中发布那个失效的链接。所以我在这里发一下。

这个失效的链接(feature_homography.py)

3

在OpenCV的最新版本中,已经有了Python风格的FlannBasedMatcher,但如果我没记错的话,它是在2.3.1版本发布之后才加入的。

这里有一个使用FlannBasedMatcher的OpenCV示例:http://code.opencv.org/projects/opencv/repository/revisions/master/entry/samples/python2/feature_homography.py

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]

撰写回答