Estoy tratando de usar la función findcontours() en OpenCV en la imagen a continuación.OpenCV findcontours devuelve 2 contornos para cada círculo
findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
Cuando hago esta consulta: contours.size()
devuelve 18, por lo que parece 2 contorno de cada círculo. Los círculos son como se puede ver un grosor de 1 píxel, ¿cómo son los 2 contornos? ¿Es uno para exterior y uno para interno, si es así, cómo puedo forzar esta función para detectar solo un contorno para cada círculo? Pensé que un contorno se definía como una secuencia conectada de píxeles, de 1 píxel de grosor.
Pero cuando miro este ejemplo [aquí] (http://jmpelletier.com/a-simple-opencv-tutorial/) parece que no está contando el interior y el exterior por separado. Pero el ejemplo es la versión C de FindContours. ¿Hay alguna diferencia entre las implementaciones antiguas y las nuevas? –
no, no debería haber ninguna diferencia entre la versión C y la versión C++ que pueda influir en el resultado final. De hecho, por lo que recuerdo, uno es solo un envoltorio para el otro. Sin embargo, mirando las imágenes de ese enlace, veo exactamente lo contrario de lo que dijo. parece detectar tanto el contorno interno como el externo de cada círculo, lo que tiene aún más sentido en la imagen que se muestra allí – Naps62
De hecho, usar el indicador CV_RETR_EXTERNAL debería arreglarlo por usted. Consulte aquí para obtener una lista completa de indicadores: http://opencv.itseez.com/modules/imgproc/doc/salud_estructura_y_diseños_de_formatos.html#void findContours (Imagen InputOutputArray, Contornos OutputArrayOfArrays, jerarquía OutputArray, modo int, método int, Desplazamiento de puntos) –