在Python中,OpenCV的FlannBasedMatcher
构造函数采用了参数字典,其中第一个是algorithm
。Python教程表明,可以通过传递不同命名的变量(例如FLANN_INDEX_KDTREE
和FLANN_INDEX_LSH
,但是变量名称当然不能将任何内容传达给构造函数。人们可能会认为这些名称应该以字符串的形式传递,但是在随后的示例中,FLANN_INDEX_KDTREE
被初始化为0,因此完全不清楚algorithm
参数如何工作。
OpenCV实际上没有任何Python文档。在C 中,构造函数不使用通用字典,而是实例化IndexClass
的对象,其中IndexClass
的每个子类都对应于其他算法。
algorithm
采用一个整数,教程中缺少的是具有不同值的FLANN_INDEX_KDTREE
和FLANN_INDEX_LSH
的初始化。(上层情况应该是一个暗示,这些暗示是指固定整数值的描述性标签。)
C 源代码具有这样的初始化列表,从中看来LSH算法对应于值6。它也将FLANN_INDEX_KDTREE
始于CC_13为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
编辑:我提出了一个拉动请求,修复了现在已接受的两个问题。