2012-07-24 16 views
9

Potrzebuję obliczyć obszar obiektu typu blob/obiektu w obrazie w skali szarości (ładowanie go jako Mat, a nie jako IplImage) przy użyciu OpenCV. Pomyślałem, że dobrze byłoby uzyskać współrzędne krawędzi (liczba krawędzi zmienia się z obiektu do obiektu) lub uzyskać wszystkie współrzędne konturu, a następnie użyć contourArea() do obliczenia obszaru mojego obiektu.Obliczanie powierzchni obiektu za pomocą OpenCV

Usunąłem wszystkie zakłócenia i uzyskałem kilka ładnych i satysfakcjonujących konturów za pomocą findContours() (programowanie w C++).

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

Teraz mam rozumieć, że param contours posiada już współrzędne wszystkich konturów mojego obiektu. Czy to rozumiem?

Jeśli tak, to czy istnieje sposób na uzyskanie do nich dostępu?

A jeśli nie, w jaki sposób mogę uzyskać współrzędne konturu?

Odpowiedz

23

contours jest faktycznie zdefiniowany jako

vector<vector<Point> > contours; 

A teraz myślę, że to jasne, w jaki sposób uzyskać dostęp do swoich punktów.

obszar konturu jest obliczana przez funkcję ładnie nazwie 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

Dzięki wielkie! Zajęło mi trochę czasu, aby zrozumieć, co robisz, ale o ile mogę powiedzieć, od teraz to działa :) Siedziałem na ten problem przez kilka dni nie widząc żadnego rozwiązania ... – Temer

+0

Czytanie dokumentów zaoszczędziło ci dużo czas :). Przykładowy kod, który jest dostarczany z OpenCV, jest również świetny. – Sam

Powiązane problemy