Вы можете следовать this link. Я лично использую следующий код для загрузки и сохранения SURF дескрипторы
def read_features_from_file(filename):
""" Read feature properties and return in matrix form. """
if os.path.getsize(filename) <= 0:
return np.array([]), np.array([])
f = np.load(filename)
if f.size == 0:
return np.array([]), np.array([])
f = np.atleast_2d(f)
return f[:,:7], f[:,7:] # feature locations, descriptors
def write_features_to_file(filename, locs, desc):
np.save(filename, np.hstack((locs,desc)))
[EDIT]: добавить коды и пример использования:
def pack_keypoint(keypoints, descriptors):
kpts = np.array([[kp.pt[0], kp.pt[1], kp.size,
kp.angle, kp.response, kp.octave,
kp.class_id]
for kp in keypoints])
desc = np.array(descriptors)
return kpts, desc
def unpack_keypoint(array):
try:
kpts = array[:,:7]
desc = array[:,7:]
keypoints = [cv2.KeyPoint(x, y, _size, _angle, _response, int(_octave), int(_class_id))
for x, y, _size, _angle, _response, _octave, _class_id in list(kpts)]
return keypoints, np.array(desc)
except(IndexError):
return np.array([]), np.array([])
def process_image(imagename, resultname):
img = cv2.imread(imagename, 0)
k = surf.detect(img, None)
if len(k) > 0:
k, des = surf.compute(img, k)
else:
des = []
k, des = pack_keypoint(k, des) #
write_features_to_file(resultname, k, des)
Спасибо за ответ @skyuuka, код вы предоставили не в питон прямо? я попытаюсь преобразовать его. В приведенной ссылке показано, что они используют рассол для хранения, но есть ли я, я могу сделать это только с помощью numpy? – CY91
Да, это в Python. Единственным требованием для вышеуказанного кода является 'import numpy as np' и' import os'. По умолчанию 'np.save' /' np.load' находится в формате '* .npy'. Вы также можете сохранить/загрузить текстовый файл с помощью 'np.savetxt' /' np.loadtxt'. – skyuuka
Таким образом, выделенные дескрипторы и ключевые точки представляют собой массив, так как np.save (имя_файла, массив) @skyuuka – CY91