Red de conocimiento del abogados - Bufete de abogados - El origen del algoritmo de coincidencia de plantillas en opencv

El origen del algoritmo de coincidencia de plantillas en opencv

El método es el siguiente:

Rutina para la comparación de imágenes usando la biblioteca SIFT en OPENCV

// opencv_empty_proj.cpp: define el punto de entrada de la aplicación de consola.

//

#Incluir " stdafx.h "

# incluir & ltopencv 2/opencv & gt; incluir & ltopencv 2/características 2d/características 2d .

# incluir & ltopen cv2/no gratuito/no gratuito HPP & gt;

# incluir & ltopencv 2. /legacy/legacy . HPP>

# include & ltvector & gt

Usar espacio de nombres std

Usar espacio de nombres cv;

int _tmain (int argc, _TCHAR* argv[])

{

const char * imagename = " img.jpg

//Desde archivo Leer imagen

mat img = im read(imagename);

mat img 2 = im read(" img 2 . jpg ");

// Si falla la lectura de la imagen,

if(img.empty())

{

fprintf(stderr, "No se puede cargar la imagen %s\n ", imagename);

return-1;

}

if(img2.empty())

{

fprintf(stderr , "No se puede cargar la imagen %s\n ", imagename

return-1

}

//Mostrar imagen

imshow("imagen anterior", img);

imshow("imagen2 anterior", img 2);

//detección de características de tamizado

SiftFeatureDetector

Vector <Importante>kp1,kp2

siftdtc.detect(img, KP 1);

mat outimg 1;

p>

drawKeypoints( img, kp1, outimg 1);

imshow("imagen1 puntos clave", outimg 1);

Punto clave

Vector & ltConsejos importantes& gtIterator itvc;

for(itvc = KP 1 . comenzar(); itvc! = KP 1 . -& gt; clase _ id & lt& lt" \ t " & lt& ltitvc-& gt; octava & lt& lt" \ t " & lt& ltitvc-& gt;pt & lt& lt" \ t " & lt& ltitvc-& gt; ; respuesta & lt& ltendl

}

siftdtc.detect(img2, kp2);

Mat outimg2

Dibuja puntos clave ( img2 , kp2, outi mg 2);

imshow("Imagen 2 puntos clave", outi mg 2

Extractor

Mat descriptor1, descriptor2<); /p>

BruteForceMatcher & ltL2<float & gt& gtmatcher

Vector & ltDMatch & gtmatch;

Mat img _matches

extractor.compute( img, kp1 , descriptor 1);

extractor.compute(img2, kp2, descriptor 2);

imshow("desc ", descriptor 1

cout &); lt& ltendl & lt& ltdescriptor 1 & lt;& ltendl

matcher.match(descriptor 1, descriptor 2, coincidencias

drawMatches(img, kp1, img2, kp2, Coincidencias), img_matches);

imshow("matches ",img_matches);

//Esta función espera la tecla y luego regresa presionando cualquier tecla del teclado.

tecla de espera();

Devuelve 0;

}