Estoy escribiendo una pequeña aplicación para detectar formas. Lo que tengo que hacer en primer lugar es encontrar la forma más significativa en una imagen. Comencé con algunos procesos previos, incluida la conversión de imágenes a escala de grises, umbralización y detección de bordes. Imagen antes y después de estas operaciones se presenta a continuacióndetección de formas - aproximación del contorno con OpenCV
Antes
Después
Así como se puede ver la forma principal es visible (sin embargo, es un poco dispersa) y también hay algunos ruidos (árboles pequeños, etc.). Lo que tengo que hacer es extraer de alguna manera solo la forma más significativa (la más grande); en este caso, es una torre. Lo que quería hacer es usar la función de búsqueda de contorno en opencv y de alguna manera aproximar las conturs encontradas con el polígono. Luego, (de alguna manera) calcularía el área de los condados y seleccionaré solo el más grande. Hasta ahora me manejadas (sólo) para encontrar contornos usando
cvFindContours(crated,g_storage,&contours);
Sé que hay una función
cvApproxPoly
, sin embargo yo no soy capaz de conseguir cualquier información útil para el resultado de esta función . Podría alguien decirme si es posible calcular el área del contorno o aproximar el contur con el polígono. ¿Tal vez tienes una mejor idea de cómo extraer solo la forma más importante?
Como una adición al proceso de Binarización. Siempre es difícil encontrar un buen valor umbral. Siempre calculo un Hisogram y busco un "punto bajo". Allí usualmente tienes un valor umbral de nive. Si está utilizando archivos JPEG, es posible que este método no funcione tan bien. –