2012-07-24 81 views
9

Necesito calcular el área de un blob/un objeto en una imagen en escala de grises (cargándola como Mat, no como IplImage) usando OpenCV. Pensé que sería una buena idea obtener las coordenadas de los bordes (el número de bordes cambia de un objeto a otro) o obtener todas las coordenadas del contorno y luego usar contourArea() para calcular el área de mi objeto.Calcula el área de un objeto con OpenCV

Eliminé todo el ruido y obtuve algunos contornos agradables y satisfactorios usando findContours() (programación en C++).

findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point()); 

Ahora tengo que entender que PARAM contours ya posee las coordenadas de todos los contornos de mi objeto. ¿Lo entendí bien?

En caso afirmativo, ¿hay alguna forma de acceder a ellos?

Y si no, ¿cómo obtengo las coordenadas del contorno de todos modos?

Respuesta

23

contours es en realidad define como

vector<vector<Point> > contours; 

Y ahora creo que es claro cómo acceder a sus puntos.

La zona del contorno se calcula mediante una función llamada muy bien contourArea():

for (unsigned int i = 0; i < contours.size(); i++) 
{ 
    std::cout << "# of contour points: " << contours[i].size() << std::endl; 

    for (unsigned int j=0; j<contours[i].size(); j++) 
    { 
     std::cout << "Point(x,y)=" << contours[i][j] << std::endl; 
    } 

    std::cout << " Area: " << contourArea(contours[i]) << std::endl; 
} 
+1

Muchas gracias! Me tomó un tiempo entender lo que estaba haciendo, pero por lo que puedo decir a partir de ahora funciona :) He estado sentado en este problema durante días sin ver ninguna solución ... – Temer

+0

Leer documentos te habría ahorrado una gran cantidad de hora :) . El código de código de muestra que viene con OpenCV también es genial. – Sam

Cuestiones relacionadas