J'ai eu une erreur lorsque j'ai essayé d'écrire KeyPoint dans un fichier à l'aide du module Pickle. C'est un mémo de la contre-mesure à ce moment-là. Si vous le recherchez, il sortira assez rapidement, donc il n'y aura peut-être pas beaucoup de demande, mais pour le moment.
http://stackoverflow.com/questions/26501193/opencv-python-find-a-code-for-writing-keypoins-to-a-file Presque la même chose que la réponse ici
out_kp_and_des.py
import cv2
import pickle
img = cv2.imread('XXXX.jpg')
detector = cv2.AKAZE_create()
#points clés et descripteurs
kp, des = detector.detectAndCompute(img, None)
with open('XXXX.pickle', mode='wb') as f:
pickle.dump((kp, des), f)
Si vous essayez de pickle KeyPoint tel quel, vous obtiendrez une erreur du type `` PicklingError: Can't pickle <class'cv2.KeyPoint '>: ce n'est pas le même objet que cv2.KeyPoint' '.
out_kp_and_des.py
import cv2
import pickle
img = cv2.imread('XXXX.jpg')
detector = cv2.AKAZE_create()
kp, des = detector.detectAndCompute(img, None)
index = []
for p in kp:
temp = (p.pt, p.size, p.angle, p.response, p.octave, p.class_id)
index.append(temp)
with open('XXXX.pickle', mode='wb') as f:
pickle.dump((index, des), f)
Retirez l'attribut KeyPoint et placez-le dans la liste pour qu'il ressemble à Pickle. La lecture du fichier ressemble à ce qui suit.
load_kp_and_des.py
import cv2
import pickle
with open('XXXX.pickle', mode='rb') as f:
index, des = pickle.load(f)
kp = []
for p in index:
temp = cv2.KeyPoint(x=p[0][0], y=p[0][1], _size=p[1], _angle=p[2],
_response=p[3], _octave=p[4], _class_id=p[5])
kp.append(temp)
Recommended Posts