无法加载已保存的FLANN索引

时间:2017-10-02 08:36:13

标签: 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.empty切换np.zeros并使用des_all.flags.writeable = True手动设置数字可写,但仍然没有。
Numpy数组的形状和类型是正确的,同样适用于文件路径:如果我尝试使用一些错误的值,我会在控制台中收到警告。

无论如何,我的des_all数组总是用零填充,对该索引的任何搜索都不会返回任何内容。
有什么建议吗?

1 个答案:

答案 0 :(得分:2)

经过大量的游戏,我终于找到了解决方案 文档并没有多大帮助,所以我不得不做很多试验和错误 据我所知,整个搜索过程分为两部分:

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

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