我正在使用OpenCV围绕SURF工作。 我想将SURF描述符放入缓存中,因此我必须序列化描述符,然后将其反序列化为描述符。
我所做的如下:
[serialize]
kp, des = surf.detectAndCompute(img, None)
jm = json.dumps(des.tolist())
[deserialize]
du = json.loads(jm)
dn = np.asarray(du)
我打印了des
,dn
的类型,它们都是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描述符?
答案 0 :(得分:0)
将加载的数据转换为数组时,请将数据类型设置为float32。
dn = np.asarray(du, dtype = np.float32)
我认为' np'这是'numpy'的别名。