Codificación el ejemplo: filtrado y extracción de los componentes conectados
Ahora vamos a codificar la función que hará el trabajo .
Voy a publicar el código de la función debajo de aquí, el código de trabajo completa está disponible al final del artículo. CvSeq * contornos, * ptr; CvMemStorage * mem = cvCreateMemStorage (0); cvFindContours (img, mem, y contornos, sizeof (CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint (0,0)); ptr = contornos; while (ptr = NULL!) {if (criterios (ptr) == 0) {if (PTR == contornos) {contornos = ptr-> h_next; ptr = contornos; ptr-> h_prev = NULL; } Else {ptr-> h_prev-> h_next = ptr-> h_next; si (ptr-> h_next = NULL!) ptr-> h_next-> h_prev = ptr-> h_prev; ptr = ptr-> h_next; }} Else {ptr = ptr-> h_next; }} return contornos; } Un ejemplo de uso En este ejemplo voy a mostrar una simple función que filtra los componentes en función de su relación , consiguiendo solamente conectado componentes que son casi cuadrada. Llamamos a la función extract_and_filter_CC así: filtered_cc = extract_and_filter_CC (img, cuadrado); Conclusión En este artículo se describe otro aplicación de los componentes conectados: filtrar partes de la imagen que no encajan en un cierto criterio. También utiliza punteros de función para hacer el filtrado de lo más genérico posible. Esta técnica es muy potente y puede ser utilizado en conjunción con otras técnicas para eliminar el ruido de una imagen o para extraer partes especiales de la imagen. El código de trabajo completo con comentarios está disponible aquí. CvSeq * extract_and_filter_CC (IplImage * img, int (* criterios ) (CvSeq *)) {
int cuadrado (CvSeq * contorno) {CvRect cuadro = cvBoundingBox (contorno); si (caja-> w /caja-> hw /caja-> h> 0,4) return 1; return 0;}
OpenCV Tutorial