2010-02-27 13 views
5

Ich versuche, ähnliche oder gleichwertige Funktion von Matlabs "Bwareaopen" -Funktion in OpenCV zu finden?Matlab Bwareaopen äquivalente Funktion in OpenCV

In MatLab Bwareaopen (Bild, P) entfernt aus einem Binärbild alle verbundenen Komponenten (Objekte), die weniger als P Pixel haben.

In meinem 1-Kanal-Bild möchte ich einfach kleine Bereiche entfernen, die nicht Teil von größeren sind? Gibt es eine triviale Möglichkeit, dies zu lösen?

Antwort

3

Werfen Sie einen Blick auf die cvBlobsLib, es hat Funktionen zu tun, was Sie wollen. In der Tat, das Code-Beispiel auf der ersten Seite dieses Links macht genau das, was Sie wollen, denke ich. Im Wesentlichen können Sie CBlobResult verwenden, um die Kennzeichnung für verbundene Komponenten auf Ihrem binären Bild durchzuführen, und dann Filter aufrufen, um Blobs nach Ihren Kriterien auszuschließen.

+0

danke tzaman für schnelle Antwort und dein Recht cvBlobsLib ist genau das, was ich brauche. aber jetzt ist die Sache, ich bin nicht sicher, dass ich diese cvBlobsLib in meinen Xcode Projekt (iPhone) Bibliotheken importieren kann, und ich hatte bereits eine Menge Arbeit sogar mit dem Import von opencv libs. Glaubst du, ich kann nur Teile des Codes aus Bibliotheken kopieren, die ich brauche? – Miha

+0

Ich habe nicht selbst cvBlobsLib benutzt (oder Xcode!), Aber es wird als Quelle verteilt, also sollten Sie in der Lage sein, einfach alle '.cpp' und' .h' Dateien zu Ihrem Projekt hinzuzufügen, '# include' die entsprechende Header, und nimm es von dort. – tzaman

+0

Vergessen Sie auch nicht, die Antwort zu akzeptieren/upvote, wenn es hilfreich war! :) – tzaman

0

ist es nicht eine solche Funktion, aber Sie können 1) finden Konturen 2) Finden Sie Bereich Konturen 3) filtern, um alle Außenkonturen mit einer Fläche weniger als Schwelle 4) Erstellen Sie neue schwarze Bild 5) Zeichnen links Konturen darauf 6) Maskiere es mit einem Originalbild