2011-11-28 10 views
8

Estoy intentando reescribir el código descrito here. usando la API de Python para Opencv.OpenCV Python's API: FlannBasedMatcher

El paso 3 del código tiene esta líneas:

FlannBasedMatcher matcher; 
std::vector<DMatch> matches; 
matcher.match(descriptors_object, descriptors_scene, matches); 

he mirado una y otra vez en the OpenCV reference pero no encontró nada relacionado con un FlannBasedMatcher en Python o algún otro objeto que pueda hacer el trabajo.

¿Alguna idea?

NOTA: Estoy OpenCV usign 2.3.1 y Python 2.6

Respuesta

10

Buscando en los ejemplos proporcionados por OpenCV 2.3.1 en la carpeta python2, me encontré con una implementación de una función de coincidencia basados ​​flann que no se basa en el objeto FlanBasedMatcher .

Aquí está el código:

FLANN_INDEX_KDTREE = 1 # bug: flann enums are missing 

flann_params = dict(algorithm = FLANN_INDEX_KDTREE, 
        trees = 4) 

def match_flann(desc1, desc2, r_threshold = 0.6): 
    flann = cv2.flann_Index(desc2, flann_params) 
    idx2, dist = flann.knnSearch(desc1, 2, params = {}) # bug: need to provide empty dict 
    mask = dist[:,0]/dist[:,1] < r_threshold 
    idx1 = np.arange(len(desc1)) 
    pairs = np.int32(zip(idx1, idx2[:,0])) 
    return pairs[mask] 
2

Pythonic FlannBasedMatcher ya está disponible en OpenCV tronco, pero si no recuerdo mal, se añadió después de la liberación 2.3.1.

Aquí está la muestra usando OpenCV FlannBasedMatcher: http://code.opencv.org/projects/opencv/repository/revisions/master/entry/samples/python2/feature_homography.py

+0

Gracias por la respuesta rápida. En este momento, tengo que apegarme a la versión 2.3.1, así que tendré que buscarme a mí mismo de otra manera para rastrear las características. –

+1

El enlace está muerto –

+0

El enlace es fijo. –