python - 无法加载已保存的 FLANN 索引

标签 python opencv numpy flann

将所有描述符添加到 FLANN 索引后,我使用以下代码保存它:

    flann = cv2.flann.Index()
    for index, filename in enumerate(os.listdir('images')):
        img2 = cv2.imread('images/' + filename, 0)
        kp2, des2 = surf.detectAndCompute(img2, None)

        des_all = np.concatenate((des_all, des2))

    print "Training..."
    flann.build(des_all, index_params)

    print "Saving..."
    flann.save('saved_index')

这会正确创建一个包含所有信息的二进制文件。
但是,我很难加载相同的文件。即使我提供正确的参数来加载其内容:

    flann = cv2.flann.Index()
    des_all = np.empty((281578, 64), dtype=np.float32)
    flann.load(des_all, 'saved_index')

我尝试将 np.emptynp.zeros 切换,并使用 des_all.flags.writeable = True 手动设置数组可写,但还是什么都没有。
Numpy 数组的形状和类型是正确的,文件路径也是如此:如果我尝试使用一些错误的值,我会在控制台中收到警告。

无论如何,我的 des_all 数组始终填充零,并且对该索引的任何搜索将始终不返回任何内容。
有什么建议吗?

最佳答案

经过一番折腾,终于找到了解决办法。
文档并没有多大帮助,所以我不得不进行大量的试验和错误。
据我所知,整个搜索过程分为两部分:

  • 实际数据
  • 快速处理的索引

这意味着当我尝试恢复以前的状态时,我必须向 FLANN 索引提供相同的数据,然后我才能加载保存的数据。
否则索引指向无效位置,导致结果为空。
您可以使用 Numpy 内置函数轻松存储原始数据。

关于python - 无法加载已保存的 FLANN 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46522098/

相关文章:

python - 所有对象都是按值返回而不是按引用返回吗?

ios - 绘制轮廓的opencv线大小

python - 使用 numpy 阵列的粒子之间的电力

python - Django Paypal无效付款日期

python - 是否有 web2py 远程过程调用的开源引用?

c - OpenCV:cvHoughCircles 使用错误

c# - C#-Emgu CV-FindContours层次结构数据始终为null

python - numpy中是否有类似masked_less的masked_max?

python - Pandas 数据帧 col 转换为 timedelta 以使用重新采样

python - 将 Libre/Star/Openoffice Basic 宏转换为 python - 对象类型问题