segmentar reconocimiento objetos monedas imagen geometricas figuras detector deteccion contornos contorno contar con canny bordes opencv

opencv - objetos - reconocimiento de figuras geometricas



Cómo detectar formas geométricas simples usando OpenCV (3)

La respuesta depende de la presencia de otras formas, el nivel de ruido si lo hay y la invarianza que desea proporcionar (por ejemplo, rotación, escalado, etc.). Estos requisitos definirán no solo el algoritmo sino también las etapas de preprocesamiento para extraer las características.

La coincidencia de plantillas que se sugirió anteriormente funciona bien cuando las formas no se rotan ni se escalan y cuando no hay formas similares alrededor; en otras palabras, encuentra la mejor traducción en la imagen donde se encuentra la plantilla:

double minVal, maxVal; Point minLoc, maxLoc; Mat image, template, result; // template is your shape matchTemplate(image, template, result, CV_TM_CCOEFF_NORMED); minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc); // maxLoc is answer

El hash geométrico es un buen método para obtener la invarianza en términos de rotación y escalado; este método requeriría la extracción de algunos puntos de contorno.

La transformada Hough generalizada puede ocuparse de la invariancia, el ruido y tendría un preprocesamiento mínimo, pero es un poco más difícil de implementar que otros métodos. OpenCV tiene tales transformaciones para líneas y círculos.

En el caso en que el número de formas es limitado, el cálculo de los momentos o el conteo de los vértices convexos del casco puede ser la solución más fácil: análisis estructural openCV

Tengo este proyecto donde necesito (en iOS) para detectar formas geométricas simples dentro de una imagen.

Después de buscar en Internet, he llegado a la conclusión de que la mejor herramienta para esto es OpenCV. El caso es que hasta hace dos horas no tenía idea de qué es OpenCV y nunca hice nada que implique el procesamiento de imágenes. Mi experiencia principal es JS / HTML, C #, SQL, Objective-C ...

¿Por dónde empiezo con esto?

He encontrado esta answer que pude digerir y al leer otras cosas, entiendo que OpenCV debería devolver una matriz de formas con los puntos / esquinas, ¿es así? Además, ¿cómo representará un círculo o un medio círculo? Además, ¿qué pasa con la orientación de la forma?

¿Conoces algún proyecto Demo iOS que pueda demostrar una funcionalidad similar?


Si solo tiene estas formas regulares, hay un procedimiento simple de la siguiente manera:

  1. Encuentre contornos en la imagen (la imagen debe ser binaria como se indica en su pregunta)
  2. approxPolyDP cada contorno usando la función approxPolyDP .
  3. Primero, verifique el número de elementos en los contornos aproximados de todas las formas. Es para reconocer la forma. Por ejemplo, el cuadrado tendrá 4, el pentágono tendrá 5. Los círculos tendrán más, no sé, entonces lo encontramos. (Tengo 16 para el círculo y 9 para el semicírculo).
  4. Ahora asigne el color, ejecute el código para su imagen de prueba, verifique su número, llénelo con los colores correspondientes.

A continuación está mi ejemplo en Python:

import numpy as np import cv2 img = cv2.imread(''shapes.png'') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(gray,127,255,1) contours,h = cv2.findContours(thresh,1,2) for cnt in contours: approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True) print len(approx) if len(approx)==5: print "pentagon" cv2.drawContours(img,[cnt],0,255,-1) elif len(approx)==3: print "triangle" cv2.drawContours(img,[cnt],0,(0,255,0),-1) elif len(approx)==4: print "square" cv2.drawContours(img,[cnt],0,(0,0,255),-1) elif len(approx) == 9: print "half-circle" cv2.drawContours(img,[cnt],0,(255,255,0),-1) elif len(approx) > 15: print "circle" cv2.drawContours(img,[cnt],0,(0,255,255),-1) cv2.imshow(''img'',img) cv2.waitKey(0) cv2.destroyAllWindows()

Debajo está el resultado:

Recuerde, solo funciona con formas regulares.

Alternativamente para encontrar círculos, puede usar houghcircles . Puedes encontrar un tutorial aquí .

En cuanto a iOS , los desarrolladores de OpenCV están desarrollando algunas muestras de iOS este verano, así que visite su sitio: www.code.opencv.org y contáctese con ellos.

Puede encontrar diapositivas de su tutorial aquí: http://code.opencv.org/svn/gsoc2012/ios/trunk/doc/CVPR2012_OpenCV4IOS_Tutorial.pdf