xfeatures2d surf_create sift_create has descriptors contrib contri attribute python opencv sift

surf_create - sift opencv python



Características de OpenCV Python y SIFT (4)

¿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, he tenido que volver a escribir este algoritmo muchas veces. De hecho, algunos investigadores de la visión intentan evitar SIFT y usan otros modelos invariantes a escala porque SIFT es propietario.

Sé que hay muchas preguntas sobre Python y OpenCV, pero no encontré ayuda en este tema especial.

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

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?

PD: También probé pyopencv (otro enlace de python para OpenCV <= 2.1) sin éxito.


En Ubuntu puedes solucionarlo instalando esta versión de opencv-contrib

pip3 install opencv-contrib-python==3.4.0.12


Puede calcular las características de SIFT utilizando los enlaces de python de OpenCV de la siguiente manera:

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


SIFT ha sido patented y no es gratuito para uso comercial.

Pero si quieres usarlo con fines educativos, es simple:

pip install opencv-python opencv-contrib-python

y luego puedes hacer

import cv2 # Initiate SIFT detector sift = cv2.xfeatures2d.SIFT_create() # find the keypoints and descriptors with SIFT kp1, des1 = sift.detectAndCompute(img, None)