问题是您不能将cv2.KeyPoint转储到pickle文件中。我遇到了同样的问题,并设法通过本质上对关键点进行序列化和反序列化来解决此问题,然后再将其与Pickle一起转储。
因此,用元组表示每个关键点及其描述符:
temp = (point.pt, point.size, point.angle, point.response, point.octave, point.class_id, desc)
将所有这些点附加到您随后与Pickle一起转储的某个列表中。
然后,当您想再次检索数据时,请用Pickle加载所有数据:
temp_feature = cv2.KeyPoint(x=point[0][0],y=point[0][1],_size=point[1], _angle=point[2], _response=point[3], _octave=point[4], _class_id=point[5]) temp_descriptor = point[6]
使用上面的代码从该数据创建一个cv2.KeyPoint,然后可以使用这些点来构建功能列表。
我怀疑有一个更整洁的方法可以做到这一点,但是以上对我来说很好(并且很快)。您可能需要稍微处理一下数据格式,因为我的功能存储在特定于格式的列表中。我试图以自己的想法为基础介绍以上内容。希望对您有所帮助。



