2012-07-24 18 views
9

Ich muss die Fläche eines Blobs/eines Objekts in einem Graustufenbild (Laden als Mat, nicht als IplImage) mit OpenCV berechnen. Ich dachte, es wäre eine gute Idee, die Koordinaten der Kanten zu erhalten (Anzahl der Kanten ändern Form Objekt zu Objekt) oder alle Koordinaten der Kontur zu erhalten und dann contourArea() zu verwenden, um die Fläche meines Objekts zu berechnen.Berechnen der Fläche eines Objekts mit OpenCV

Ich löschte alle Geräusche und bekam einige schöne und befriedigende Konturen mit findContours() (Programmierung in C++).

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

Jetzt habe ich das param verstehen besitzt contours bereits die Koordinaten aller Konturen meines Objekts. Habe ich das richtig verstanden?

Wenn ja, gibt es eine Möglichkeit, auf sie zuzugreifen?

Und wenn nein, wie bekomme ich die Koordinaten der Kontur trotzdem?

Antwort

23

contours ist eigentlich definiert als

vector<vector<Point> > contours; 

Und jetzt denke ich, ist es klar, wie seine Punkte zuzugreifen.

Der Konturbereich wird durch eine Funktion berechnet schön contourArea() genannt:

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

Vielen Dank! Es dauerte eine kurze Zeit, um zu verstehen, was Sie getan haben, aber soweit ich das jetzt sagen kann, funktioniert es :) Seit Tagen saßen Sie auf diesem Problem, ohne eine Lösung zu sehen ... – Temer

+0

Lesen von Dokumenten hätte Sie viel gerettet Zeit :) . Der Codecode, der mit OpenCV mitgeliefert wird, ist ebenfalls großartig. – Sam

Verwandte Themen