在将所有描述符添加到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数组总是填充0,对该索引的任何搜索都不会返回任何内容。
有什么建议吗?
发布于 2017-10-03 14:35:51
在玩了很多次之后,我终于找到了解决办法。
文档没有多大帮助,所以我不得不做大量的尝试和错误。
据我所知,整个搜索过程分为两部分:
这意味着,当我试图恢复以前的状态时,我必须提供相同的FLANN索引数据,然后才能加载保存的数据。
否则,索引指向无效位置,导致结果为空。
您可以使用Numpy内置函数轻松地存储原始数据。
https://stackoverflow.com/questions/46522098
复制相似问题