在python中,OpenCV的FlannBasedMatcher
构造函数采用参数字典,第一个是algorithm
。 The python tutorial建议您可以通过传递不同命名的变量来指定algorithm
的不同值,例如FLANN_INDEX_KDTREE
和FLANN_INDEX_LSH
,但变量 name 当然不能向构造函数传达任何内容。有人可能会认为这些名称应该作为字符串传递,但在下面的示例中,FLANN_INDEX_KDTREE
初始化为0,因此完全不清楚algorithm
参数是如何工作的。
OpenCV并没有真正的python文档。 In C++,构造函数不会使用通用字典,而是实例化IndexClass
的对象,其中IndexClass
的每个子类对应不同的算法。
答案 0 :(得分:4)
algorithm
采用整数,教程中缺少的是FLANN_INDEX_KDTREE
和FLANN_INDEX_LSH
的初始化值。 (大写应该暗示这些是固定整数值的描述性标签。)
C++ source code有这样的初始化列表,从中可以看出LSH算法对应的值为6.它还将FLANN_INDEX_KDTREE
初始化为1,这意味着要么是python教程,哪个有0,错了,或源代码在不同的地方使用冲突的定义(我错过了),这是不幸的。
这些是源代码中的所有值:
FLANN_INDEX_LINEAR = 0
FLANN_INDEX_KDTREE = 1
FLANN_INDEX_KMEANS = 2
FLANN_INDEX_COMPOSITE = 3
FLANN_INDEX_KDTREE_SINGLE = 4
FLANN_INDEX_HIERARCHICAL = 5
FLANN_INDEX_LSH = 6
FLANN_INDEX_SAVED = 254
FLANN_INDEX_AUTOTUNED = 255
编辑:我提交了a pull request来解决现已被接受的两个问题。