首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法加载保存的FLANN索引

无法加载保存的FLANN索引
EN

Stack Overflow用户
提问于 2017-10-02 08:36:12
回答 1查看 943关注 0票数 2

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

代码语言:javascript
复制
    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')

这将正确地创建包含所有信息的二进制文件。

但是,我很难加载相同的文件。即使我提供了正确的参数来加载其内容:

代码语言:javascript
复制
    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数组总是填充0,对该索引的任何搜索都不会返回任何内容。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 14:35:51

在玩了很多次之后,我终于找到了解决办法。

文档没有多大帮助,所以我不得不做大量的尝试和错误。

据我所知,整个搜索过程分为两部分:

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

这意味着,当我试图恢复以前的状态时,我必须提供相同的FLANN索引数据,然后才能加载保存的数据。

否则,索引指向无效位置,导致结果为空。

您可以使用Numpy内置函数轻松地存储原始数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46522098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档