6

在 python 中,OpenCV 的FlannBasedMatcher构造函数接受一个参数字典,其中第一个是algorithm. python 教程建议可以algorithm通过传递不同命名的变量来指定不同的值,例如FLANN_INDEX_KDTREEand FLANN_INDEX_LSH,但变量当然不能向构造函数传达任何内容。有人可能认为这些名称应该作为字符串传递,但在下面的示例中,FLANN_INDEX_KDTREE初始化为 0,因此完全不清楚algorithm参数如何工作。

OpenCV 并没有真正的 python 文档。在 C++中,构造函数不采用通用字典,而是采用实例化的对象IndexClass,其中的每个子类IndexClass对应于不同的算法。

4

1 回答 1

8

algorithm接受一个整数,教程中缺少的是不同值的FLANN_INDEX_KDTREE初始化FLANN_INDEX_LSH。(大写应该暗示这些是固定整数值的描述性标签。)

C++ 源代码有这样一个初始化列表,从中可以看出 LSH 算法对应于值 6。它也初始化FLANN_INDEX_KDTREE为 1,这意味着有 0 的 python 教程是错误的,或者源代码在不同的地方使用了冲突的定义(我错过了),这将是不幸的。

这些是源代码中的所有值:

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

编辑:我提交了一个拉取请求,修复了现在已被接受的两个问题。

于 2017-02-22T16:25:34.333 回答