2011-07-17 25 views
15

Sé que hay un montón de preguntas sobre Python y OpenCV pero no encontré ayuda sobre este tema especial.Características de OpenCV Python y SIFT

Quiero extraer SIFT puntos clave de una imagen en python OpenCV.

Recientemente instalé OpenCV 2.3 y puedo acceder a SURF y MSER pero no a SIFT. No puedo ver nada relacionado con SIFT en los módulos de Python (cv y cv2) (bueno, estoy mintiendo un poco: hay 2 constantes: cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLE y cv2.SIFT_COMMON_PARAMS_FIRST_ANGLE).

Esto me desconcierta desde hace un tiempo. ¿Está relacionado con el hecho de que algunas partes de OpenCV están en C y otras en C++? ¿Alguna idea?

P.S .: También he intentado pyopencv (otro enlace de pitón para OpenCV < = 2.1) sin éxito.

+0

Did usted construyó OpenCV de fuentes? – Unapiedra

+0

Sí, tengo compilación OpenCV 2.3 desde el origen utilizando las opciones CMAKE_BUILD_TYPE = LIBERACIÓN, CMAKE_INSTALL_PREFIX, BUILD_PYTHON_SUPPORT = ON, WITH_QT = ON (la compilación funciona sin problemas). –

+0

Los chicos de willowgarage ponen en línea la documentación de OpenCV 2.3 [link] (http://opencv.itseez.com/). Aparentemente features2d en python no incluye muchas de las cosas. –

Respuesta

1

¿Estás seguro de que OpenCV puede admitir SIFT? SIFT es un tipo de característica patentada, patentada en los EE. UU. Por la Universidad de British Columbia y por David Lowe, el inventor del algoritmo. En mi propia investigación, tuve que volver a escribir este algoritmo muchas veces. De hecho, algunos investigadores de la vista intentan evitar SIFT y usan otros modelos invariantes de escala porque SIFT es propietario.

+5

SIFT está en OpenCV (puede consultar la documentación de C++). Por qué no es accesible desde Python es realmente misterioso. Seguro que hay detectores de puntos de interés, pero SIFT es una especie de línea de base ... –

+1

Quizás el código Python de este enlace sea suficiente para lo que necesita hacer: . Parece que esto sería muy fácil de mezclar con el código OpenCV. – ely

+1

Gracias. He usado trucos así ... Y creo que me quedaré con eso. Pero todavía no entiendo por qué SIFT no es accesible desde Python. –

0

Puede calcular SIFT cuenta con el uso de fijaciones OpenCV pitón de la siguiente manera:

import cv2 

    sift = cv2.SIFT() 
    keypoints, descriptors = sift.detectAndCompute(imgray,None) 
+0

SIFT() no funciona con la biblioteca cv2. intenté Python (x, y) también, pero sin éxito. ¿Puedes decir, de dónde sacaste la biblioteca? ¿Compiló de la fuente o de cualquier otro método? –