OpenCV Python的API:FlannBasedMatcher
我正在尝试用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
我因为没有足够的声望,无法在上面的帖子中发布那个失效的链接。所以我在这里发一下。
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]