Als ich versuchte, KeyPoint mit dem Pickle-Modul in eine Datei zu schreiben, wurde eine Fehlermeldung angezeigt. Es ist ein Memo der damaligen Gegenmaßnahme. Wenn Sie danach suchen, wird es ziemlich schnell herauskommen, so dass möglicherweise nicht viel Nachfrage besteht, aber vorerst.
http://stackoverflow.com/questions/26501193/opencv-python-find-a-code-for-writing-keypoins-to-a-file Fast das gleiche wie die Antwort hier
out_kp_and_des.py
import cv2
import pickle
img = cv2.imread('XXXX.jpg')
detector = cv2.AKAZE_create()
#Schlüsselpunkte und Deskriptoren
kp, des = detector.detectAndCompute(img, None)
with open('XXXX.pickle', mode='wb') as f:
pickle.dump((kp, des), f)
Wenn Sie versuchen, KeyPoint so zu übernehmen, wie es ist, wird eine Fehlermeldung wie "PicklingError: <class'cv2.KeyPoint" kann nicht ausgewählt werden: Es ist nicht dasselbe Objekt wie 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)
Nehmen Sie das KeyPoint-Attribut heraus und fügen Sie es in die Liste ein, damit es sich wie Pickle anfühlt. Das Lesen der Datei sieht wie folgt aus.
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