Red de conocimiento informático - Material del sitio web - ¿Cómo utilizar matchShapes de OPENCV para igualar contornos?

¿Cómo utilizar matchShapes de OPENCV para igualar contornos?

Paso principal 1. Leer una imagen y binarizarla. 2. Realizar procesamiento morfológico para reducir características secundarias como agujeros y mantener sus características principales. 3. Realice la extracción de los bordes. 4. Haga coincidir el contorno de la forma para obtener su valor coincidente y determinar si es la misma forma.

El siguiente es el código de demostración:

#includes

#includes " opencv2/opencv.hpp "

usandonamespacestd

usandonamespacecv

intmain()

{

Matk=imread("E:/TestGit/8.jpg ", 0);

Matf

matk 1 = estoy leído(" E:/test git/9 . jpg ",

matf 1; >umbral (k, f, 50, 255, THRESH _ BINARY); // Binarizar la imagen

umbral (k1, f1, 50, 255, THRESH _ BINARY

); matcloserect = getStructuringElement(MORPH _ RECT, Size(3, 3)); //Generar operador estructural

morphologyEx(f, f, MORPH_OPEN, close rect);

morphologyEx( f1 , f1, MORPH_OPEN, close rect); //Realiza operaciones morfológicas.

Matdst=Mat::zeros(k.rows,k.cols,CV_8uc3);

matdst 1 = Mat::zeros(k1.rows,k1. cols, CV_8uc 3

vector gtw, w 1;

jerarquía de vectores, nivel 1

findContours(f,w,jerarquía,RETR_CCOMP, CHAIN ​​​​_ APPROX _ SIMPLE); //Seleccionar elementos del esquema

findContours(f1, w1, jerarquía1, RETR_CCOMP, CHAIN ​​​​_ APPROX _ SIMPLE);

FileStoragefs("f.dat ", archivo); almacenamiento:: WRITE);

Escala completa

intidx = 0;

doubleffff=matchShapes(w[0], w1[0], CV_CONTOURS_MATCH_I3, 1.0 ); //Realizar coincidencia de contornos

Estándar: :cout

System("pause");

return0

}

De esta forma conseguimos la extracción y coincidencia de los bordes del contorno, que satisface las necesidades. Diferentes operadores tienen diferentes métodos de operadores coincidentes.