OpenCV - finden bounding-box der größte blob in Binär-Bild
Was ist der effizienteste Weg, um die bounding-box der größte blob in ein binäres Bild mit OpenCV? Leider OpenCV nicht spezifische Funktionalität für blob-Erkennung. Sollte ich gerade findContours()
und die Suche nach dem größten in der Liste?
Es hängt davon ab, was Sie tun möchten, mit der blob hinterher, aber Ihr Ansatz ist gültig 🙂
Wenn Sie sagen, was Sprache, die Sie verwenden, Sie können Holen Sie mehr spezifische Antworten.
Gerade lese ich etwas über diese. Wenn Sie bereits über ein binäres Bild, es klingt, wie mit der Suzuki-Methode (
Ich wollen einfach nur, um die bounding-box des blob. Ich bin mit OpenCV für Android, aber alle Versionen von OpenCV haben so ziemlich die gleichen Funktionen.
Wenn Sie sagen, was Sprache, die Sie verwenden, Sie können Holen Sie mehr spezifische Antworten.
Gerade lese ich etwas über diese. Wenn Sie bereits über ein binäres Bild, es klingt, wie mit der Suzuki-Methode (
findContours
) ist eine wirklich gute Passform. Man könnte auch inkrementell finden die ersten weißen pixel, dann verwenden Sie floodFill
zu finden, der rest der region, und so weiter. Aber ich bin mir nicht sicher, das wäre schneller.Ich wollen einfach nur, um die bounding-box des blob. Ich bin mit OpenCV für Android, aber alle Versionen von OpenCV haben so ziemlich die gleichen Funktionen.
InformationsquelleAutor 1'' | 2013-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, verwenden OpenCV libs, check-out OpenCVs SimpleBlobDetector. Hier ist noch ein stack-overflow, die ein kleines tutorial: Wie zu verwenden OpenCV SimpleBlobDetector
Dies nur gibt Ihnen wichtige Punkte, wenn. Man könnte dies als eine erste Suche nach der blob, die Sie wollen, und dann evtl. die findContours Algorithmus, um den wahrscheinlichsten blobs.
Auch mehr Informationen, die Sie wissen über Ihre blob ist, können Sie einen Parameter zum filtern der blobs, die Sie nicht wollen. Sie möchten vielleicht testen, die Parameter der SimpleBlobDetector. Möglicherweise könnte die Berechnung der Fläche, basierend auf der Größe der Fläche des Bildes und dann iterativ ein kleineres blob, wenn der Algorithmus erkennt keine blobs.
Hier ist der link zu den wichtigsten OpenCV-Dokumentation: http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#simpleblobdetector
findContours
. Leider ist es nicht in OpenCV4Android, also ich bleibe bei meinem ursprünglichen plan.InformationsquelleAutor
Hier. Es. Ist.
(Zur info: versuchen Sie, nicht faul zu sein und herauszufinden, was passiert in meiner Funktion unten.
NÖ, meine Antwort ist in C++, die core-Sprache für OpenCV. Wie gesagt, es ist für faule.
Könnten Sie mir helfen mit der java-äquivalent drawContours()
InformationsquelleAutor
Finden Sie die bounding-box der größte blob, die ich verwendet
findContours
, gefolgt, indem Sie den folgenden code:InformationsquelleAutor
Möglicherweise die effizienteste Möglichkeit ist die Verwendung CvBlobsLib.
Sie können es herunterladen unter
http://sourceforge.net/projects/cvblobslib/?source=dlp
InformationsquelleAutor
TimZaman, dein code hat einen Fehler, aber ich kann nicht kommentieren, damit ich starten Sie eine neue und richtige Antwort.
Hier ist meine Lösung, basierend auf 1"'s und TimZaman Ideen:
InformationsquelleAutor