Wie kann ich Konturen nach der Größe ihrer Konturbereiche sortieren? Und wie kann ich den größten/kleinsten bekommen?OpenCV C++: Konturen nach ihrer Kontur sortierenArea
9
A
Antwort
28
Sie können std::sort
mit einer benutzerdefinierten Vergleichsfunktion Objekt verwenden
// comparison function object
bool compareContourAreas (std::vector<cv::Point> contour1, std::vector<cv::Point> contour2) {
double i = fabs(contourArea(cv::Mat(contour1)));
double j = fabs(contourArea(cv::Mat(contour2)));
return (i < j);
}
Verbrauch:
[...]
// find contours
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(binary_image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));
// sort contours
std::sort(contours.begin(), contours.end(), compareContourAreas);
// grab contours
std::vector<cv::Point> biggestContour = contours[contours.size()-1];
std::vector<cv::Point> smallestContour = contours[0];
2
einfach eine Lösung geben Funktion mit dem Lambda, wenn C++ 11 zur Verfügung steht.
sort(contours.begin(), contours.end(), [](const vector<Point>& c1, const vector<Point>& c2){
return contourArea(c1, false) < contourArea(c2, false);
});
Dann können Sie contours[0]
Zugriff auf die Kontur mit dem kleinsten Bereich zu bekommen und contours[contours.size()-1]
das mit der größten Fläche zu erhalten, weil die Konturen in aufsteigender Reihenfolge sortiert werden.
Verwandte Themen
- 1. Android OpenCV Finden Sie Konturen
- 2. OpenCv findcontours() zu viele Konturen
- 3. Opencv konturen erkannt discontinu
- 4. opencv: Suche nach Konturen auf numpy Array
- 5. OpenCV wie Kontur glätten, Lärm zu reduzieren
- 6. Java - OpenCV zusätzliche Konturen
- 7. die „Fitline“ von Konturen in OpenCV Finding
- 8. Finden der Länge der Kontur in opencv
- 9. findContours keine offensichtlichen Konturen in OpenCV?
- 10. OpenCV Kontur Mindestmaß Ort in Python
- 11. Cluster mit Konturen, Android, OpenCV
- 12. OpenCV Konvertierung Canny Kanten zu Konturen
- 13. innerhalb einer Kontur in opencv die Anzahl der Kinder Konturen Zählen
- 14. Konturen opencv: Wie kleine Konturen in einem Binärbild zu beseitigen
- 15. Wie entferne ich eine Kontur innerhalb der Kontur in Python OpenCV?
- 16. Suchen, ob eine Kontur innerhalb einer anderen Kontur existiert
- 17. OpenCV Python: Finden Sie Konturen/Kanten/Rechteck in einem Bild
- 18. Geschlossene Kontur in C++/Qt
- 19. MATLAB variable Kontur LevelStep
- 20. Split SpatialLinesDataFrame Konturen nach Ebene
- 21. Merge nah genug Punkte in Konturen
- 22. Bestimmen, ob eine Farbe innerhalb einer Kontur ist OpenCV
- 23. Wie erhalten Sie separate Konturen (und füllen Sie sie) in OpenCV?
- 24. Wie zeichne Rechteck um Konturen in Opencv (Android)?
- 25. opencv einen Teil des Bildes innerhalb Kontur beschneiden
- 26. Aktive Konturen (Schlangen) Gradient Decent
- 27. Mit OpenCV, wie man Konturen innerhalb der Kanten der erkannten Form/Blob zeichnen?
- 28. Was bedeutet len (Kontur)?
- 29. OpenCV: Wie kann man nach Aufruf cvFindContours() auf eine Kontur in O (1) zugreifen?
- 30. Problem mit DrawContours OpenCV C++
Wie ist das zulässig, wenn die compareContourAreas mit 2 Argumenten definiert ist? – Zypps987