pickle保存cv2.KeyPoint失败问题
pickle不能保存自定义的类型
可以将KeyPoint转为字典保存后再读取
import numpy as np
import cv2
import pickle
#示例save_kps.save_kps(kps,des,'kp1','des1')
def save_kps(kps,des,kname,dname):
kps_trs = []
for kp in kps:
kps_trs.append({'pt': kp.pt, 'size': kp.size, 'angle': kp.angle, 'octave': kp.octave,
'class_id': kp.class_id, 'response': kp.response})
with open(kname+'.pickle', 'wb') as file:
pickle.dump(kps_trs, file)
np.save(dname, des)
#示例save_kps.save_kps('kps.pickle','des.npy')
def load_kps(kps_path,des_path):
with open(kps_path, 'rb') as file:
kps_loaded = pickle.load(file)
kps_f = []
for tr in kps_loaded:
kps_f.append(cv2.KeyPoint(x=tr['pt'][0], y=tr['pt'][1], size=tr['size'], angle=tr['angle'],
response=tr['response'], octave=tr['octave'], class_id=tr['class_id']))
with open(des_path, 'rb') as f:
des_f = np.load(f)
return kps_f, des_f;