instalar - ¿Alguien tiene algún ejemplo de cómo usar OpenCV con python para la extracción de descriptores?
opencv python tutorial pdf español (4)
Estoy tratando de usar OpenCV para extraer los descriptores SURF de una imagen. Estoy usando OpenCV 2.4 y Python 2.7, pero estoy luchando para encontrar cualquier documentación que proporcione cualquier información sobre cómo usar las funciones. He podido usar el siguiente código para extraer funciones, pero no puedo encontrar ninguna forma sensata de extraer descriptores:
import cv2
img = cv2.imread("im1.jpg")
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
surf = cv2.FeatureDetector_create(''SURF'')
detector = cv2.GridAdaptedFeatureDetector(surf, 50) # max number of features
fs = detector.detect(img2)
El código que intenté para extraer descriptores es:
import cv2
img = cv2.imread("im3.jpg")
sd = cv2.FeatureDetector_create("SURF")
surf = cv2.DescriptorExtractor_create("SURF")
keypoints = []
fs = surf.compute(img, keypoints) # returns empty result
sd.detect(img) # segmentation faults
¿Alguien tiene algún código de muestra que haga este tipo de cosas, o punteros a alguna documentación que proporcione muestras?
Aquí hay un simple código que hice recientemente para uni. Captura la imagen de una cámara y muestra los puntos clave detectados en la imagen de salida en tiempo real. Espero que te sea de utilidad.
Hay algo de documentación here .
Código:
import cv2
#Create object to read images from camera 0
cam = cv2.VideoCapture(0)
#Initialize SURF object
surf = cv2.SURF(85)
#Set desired radius
rad = 2
while True:
#Get image from webcam and convert to greyscale
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Detect keypoints and descriptors in greyscale image
keypoints, descriptors = surf.detect(gray, None, False)
#Draw a small red circle with the desired radius
#at the (x, y) location for each feature found
for kp in keypoints:
x = int(kp.pt[0])
y = int(kp.pt[1])
cv2.circle(img, (x, y), rad, (0, 0, 255))
#Display colour image with detected features
cv2.imshow("features", img)
#Sleep infinite loop for ~10ms
#Exit if user presses <Esc>
if cv2.waitKey(10) == 27:
break
Este es un ejemplo de un código que he escrito para extraer características de SURF usando Python 2.7 y OpenCV 2.4.
im2 = cv2.imread(imgPath)
im = cv2.cvtColor(im2, cv2.COLOR_BGR2GRAY)
surfDetector = cv2.FeatureDetector_create("SURF")
surfDescriptorExtractor = cv2.DescriptorExtractor_create("SURF")
keypoints = surfDetector.detect(im)
(keypoints, descriptors) = surfDescriptorExtractor.compute(im,keypoints)
Esto funciona y devuelve un conjunto de descriptores. Desafortunadamente, dado que cv2.SURF () no funciona en 2.4, tienes que pasar por este proceso tedioso.
Usando open cv 2.4.3, puedes hacer lo siguiente:
import cv2
surf = cv2.SURF()
keypoints, descriptors = surf.detectAndCompute(img,None,useProvidedKeypoints = True)
todofix esto sigo tu codigo y me sale esto
import cv2
img = cv2.imread("im3.jpg")
sd = cv2.FeatureDetector_create("SURF")
surf = cv2.DescriptorExtractor_create("SURF")
keypoints = sd.detect(img) # segmentation faults
l,d = surf.compute(img, keypoints) # returns empty result
dónde
l = puntos clave
d = descriptor