OpenCV - matchTemplate plantilla coincidente

Conceptos y principios de emparejamiento de plantillas

comparación de plantillas es encontrar en la imagen de plantilla que mejor se adapte (como) la primera parte de la imagen y.

Los pasos específicos de izquierda a derecha, la imagen plantilla de cálculo del grado de cobertura a juego con un área de la imagen de arriba a abajo, cuanto mayor sea el grado de correspondencia, mayor será la posibilidad de que los dos son lo mismo.

 

Darse cuenta de comparación de plantillas: función matchTemplate

void matchTemplate (imagen InputArray, InputArray temp1, resultado outputArray, método int);

  • Imagen, la imagen que se debe buscar, y para una imagen de 8 bits o de 32 bits en coma flotante.
  • Temp 1, plantillas de búsqueda, usted necesita el cuadro original y tener el mismo tipo de datos, y el tamaño no puede ser más grande que la imagen de origen.
  • En consecuencia, resultado de la comparación de imagen asignada, que debe ser de un solo canal, las imágenes de punto flotante de 32 bits, el tamaño (image.cols - temp1.cols 1) × (image.rows - temp1.rows +1)
  • método, método de coincidencia, hay seis tipos de opciones:
Matching La fórmula

Coincidencia de diferencia al cuadrado

TM_SQDIFF

 

Normalizado correspondiente diferencia cuadrada

TM_SQDIFF_NORMED

 

método de correlación coincidente

TM_CCORR

 

método de emparejamiento de correlación normalizado

TM_CCORR_NORMED

 

Coincidencia de coeficiente

TM_CCOEFF

 

entre

Coeficiente de correlación coincidente

TM_CCOEFF_NORMED

 

 

Ejemplo de código:

# include <opencv.hpp> 
#include <iostream> 
#include < string >
 utilizando  espacio de nombres std;
el uso de  espacio de nombres cv; 
Src Mat, temp; 
int method = 0 ;
void ChangeMethod ( int , void * ) {
     interruptor (método) {
     caso  0 : 
        método = TM_SQDIFF;
        romper ;
    caso  1 : 
        método = TM_SQDIFF_NORMED;
        romper ;
    caso  2 : 
        método = TM_CCORR;
        romper ;
    caso  3 : 
        método = TM_CCORR_NORMED;
        romper ;
    caso  4 : 
        método = TM_CCOEFF;
        romper ;
    caso  5 : 
        método = TM_CCOEFF_NORMED;
        romper ; 
    } 
    MAT resultar; 
    matchTemplate (src, temp, resultado, método); 
    imshow ( " resultado " , resultado);

    Mat dst = src.clone ();
    doble mxValue, mnValue; 
    Punto mxPoint, mnPoint; 
    minMaxLoc (resultado, y mnValue, y mxValue, y mnPoint, y mxPoint); 
// https://www.cnblogs.com/bjxqmy/p/12386274.html
si (método == TM_SQDIFF || método == TM_SQDIFF_NORMED) { rectángulo (dst, mnPoint, punto (mnPoint.x + temp.cols, mnPoint .y + temp.rows), escalar ( 0 , 0 , 255 )); } Demás { rectángulo (DST, mxPoint, Point (mxPoint.x + temp.cols, mxPoint.y + temp.rows), Escalar ( 0 , 0, 255 )); } Imshow ( " dst " , dst); } Int main () { src = imread ( " C: / Usuarios /齐明洋/Desktop/1.jpg " ); temp = imread ( " C: / Usuarios /齐明洋/Desktop/a.jpg " ); imshow ( " src " , src); imshow ( " temp " , temp); namedWindow ( " dst " ); createTrackbar ( " método " , "" , Y método, 5 , ChangeMethod); ChangeMethod ( 0 , 0 ); WAITKEY ( 0 ); }

efecto de demostración:

Ilustraciones y plantillas:

 

método TM_SQDIFF

 

método TM_SQDIFF_NORMED

 

método TM_CCORR

 

método TM_CCORR_NORMED

 

método TM_CCOEFF

 

método TM_CCOEFF_NORMED

 

el blog de referencia: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

https://www.cnblogs.com/fuzhuoxin/p/12158777.html

 

Supongo que te gusta

Origin www.cnblogs.com/bjxqmy/p/12454971.html
Recomendado
Clasificación