2014-09-05 3 views

ответ

2

Вы можете следовать 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) 
+0

Спасибо за ответ @skyuuka, код вы предоставили не в питон прямо? я попытаюсь преобразовать его. В приведенной ссылке показано, что они используют рассол для хранения, но есть ли я, я могу сделать это только с помощью numpy? – CY91

+0

Да, это в Python. Единственным требованием для вышеуказанного кода является 'import numpy as np' и' import os'. По умолчанию 'np.save' /' np.load' находится в формате '* .npy'. Вы также можете сохранить/загрузить текстовый файл с помощью 'np.savetxt' /' np.loadtxt'. – skyuuka

+0

Таким образом, выделенные дескрипторы и ключевые точки представляют собой массив, так как np.save (имя_файла, массив) @skyuuka – CY91

Смежные вопросы