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)