如何在OpenCV中序列化和反序列化SURF描述符?

时间:2015-12-05 06:06:11

标签: python opencv

我正在使用OpenCV围绕SURF工作。 我想将SURF描述符放入缓存中,因此我必须序列化描述符,然后将其反序列化为描述符。

我所做的如下:

[serialize]
    kp, des = surf.detectAndCompute(img, None)
    jm = json.dumps(des.tolist())

[deserialize]
    du = json.loads(jm)
    dn = np.asarray(du)

我打印了desdn的类型,它们都是np.ndarray的类型。 Howerver,在反序列化后,我无法使用dn执行knnMatch,而使用原始des则可以。

有一个错误:

  

OpenCV错误:断言失败(_queryDescriptors.type()== trainDescType)在knnMatchImpl,文件/home/zibo/opencv/modules/features2d/src/matchers.cpp,第722行

似乎原始描述符des不仅仅是numpy.ndarray的一种类型。我搜索了OpenCV代码,但还没有找到答案。

所以,任何人都可以提供帮助。如何序列化和反序列化SURF描述符?

1 个答案:

答案 0 :(得分:0)

将加载的数据转换为数组时,请将数据类型设置为float32。

dn = np.asarray(du, dtype = np.float32)

我认为' np'这是'numpy'的别名。