[OpenCV; Python] Zusammenfassung der Funktion findcontours

Ich konnte keine detaillierte Erklärung der Python-Version von OpenCV findcontours im Internet finden, daher möchte ich notieren, was ich versucht habe. Wenn Sie einen Fehler machen, weisen Sie bitte darauf hin.

findcontours Funktion

Wenn Sie den Umriss eines Bildes mit OpenCV extrahieren möchten, verwenden Sie eine Funktion namens findContours. Das Eingabebild wird als erstes Argument verwendet, der Extraktionsmodus wird als zweites Argument verwendet und die Approximationsmethode wird als drittes Argument verwendet.

findcontours Funktion


image, contours, hierarchy = cv2.findContours(Bild eingeben,Extraktionsmodus,Ungefähre Methode)

Dieser Artikel erklärt nicht die Approximationsmethode. Wir verwenden eine einheitliche Approximationsmethode namens "cv2.CHAIN_APPROX_SIMPLE".

Unterschied in der Konturextraktion von schwarzen und weißen Klecksen

Ein Blob bedeutet "Klumpen" und bezieht sich auf eine Masse schwarzer oder weißer Pixel. Bei der Konturextraktion scheint sich die Methode zum Extrahieren der Kontur zwischen der Kontur des weißen Blobs und der Kontur des schwarzen Blobs zu unterscheiden, daher werde ich sie weiter unten erläutern.

Schwarze Kleckskontur

Der Umriss des schwarzen Blobs scheint die Eckpunkte der äußersten Matrix des Blobs gegen den Uhrzeigersinn zu extrahieren. image

Weiße Kleckskontur

Der Umriss des weißen Blobs scheint die Außenseite der äußersten Matrix des Blobs im Uhrzeigersinn zu extrahieren, wie in der folgenden Abbildung gezeigt. image

Priorität

Bei der Erkennung der Kontur von außen wird zuerst Schwarz erkannt. Wenn Sie also einen schwarzen Fleck auf weißem Hintergrund haben, wird der schwarze Fleck zuerst erkannt. Wenn Sie jedoch einen schwarzen Hintergrund haben, wird der schwarze Hintergrund zuerst erkannt. Vorsicht ist geboten.

Was mir aufgefallen ist

Ausgabe


[array([[[1, 1]],

       [[1, 8]],

       [[8, 8]],

       [[8, 1]]])]

Die Reihenfolge, in der die Konturen der Blobs erfasst werden, scheint in absteigender Reihenfolge des y-Werts der Koordinaten des Startpunkts der Konturextraktion zu liegen. Wenn die y-Werte gleich sind, ist die Reihenfolge der größeren x-Werte früher.

Extraktionsmodus

Es gibt mindestens vier Extraktionsmodi: `` RETR_EXTERNAL```, RETR_LIST```, RETR_CCOMP``` und `RETR_TREE```.

RETR_EXTERNAL RETR_EXTERNAL ist ein Modus, der nur die äußerste Kontur der Kontur extrahiert. Selbst wenn sich innerhalb der Kontur eine Kontur befindet, wird diese nicht extrahiert. Daher wird der Umriss des weißen Blobs nicht erkannt. image

Ausgabe


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]])]

RETR_TREE RETR_TREE ist eine perfekte Darstellung verschachtelter Konturen. Mit anderen Worten, zuerst werden die schwarzen Blobs in der unter "Was ich bemerkt habe" erläuterten Reihenfolge erkannt, und wenn ein Blob mit einer verschachtelten Struktur gefunden wird, wird der Umriss des Blobs in diesem Blob extrahiert. image

Ausgabe


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]]), array([[[1, 2]],

       [[2, 1]],

       [[4, 1]],

       [[5, 2]],

       [[5, 4]],

       [[4, 5]],

       [[2, 5]],

       [[1, 4]]]), array([[[3, 3]]])]

RETR_LIST RETR_LIST erhält Konturen in derselben Hierarchie, unabhängig von der weißen Kontur, der schwarzen Kontur, innen oder außen. Daher ist die Reihenfolge des Erfassens von Konturen die in "in Was mir aufgefallen ist" erläuterte Reihenfolge. image

Ausgabe


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[3, 3]]]), array([[[1, 2]],

       [[2, 1]],

       [[4, 1]],

       [[5, 2]],

       [[5, 4]],

       [[4, 5]],

       [[2, 5]],

       [[1, 4]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]])]

RETR_CCOMP RETR_CCOMP extrahiert zuerst alle Konturen der schwarzen Blobs und dann die Konturen der weißen Blobs. Die Bestellung entspricht der in "・ Was mir aufgefallen ist" erläuterten Reihenfolge. image

Ausgabe


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[3, 3]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]]), array([[[1, 2]],

       [[2, 1]],

       [[4, 1]],

       [[5, 2]],

       [[5, 4]],

       [[4, 5]],

       [[2, 5]],

       [[1, 4]]])]

Recommended Posts

[OpenCV; Python] Zusammenfassung der Funktion findcontours
Zusammenfassung der Python-Funktionsargumente
Zusammenfassung der Python-Argumente
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
[Python] Wert des Funktionsobjekts (?)
[Python] Der Ursprung des Namens der Python-Funktion
Umgebungskonstruktion von Python und OpenCV
Python-Zusammenfassung
Python-Funktion ①
[Python] -Funktion
Eine kurze Zusammenfassung der Python-Sammlung
Python-Zusammenfassung
Zusammenfassung der Python-Indizes und -Slices
Python-Funktion ②
Grundlegendes Studium von OpenCV mit Python
[Python] Zusammenfassung der Verwendung von Pandas
[Python2.7] Zusammenfassung der Verwendung von unittest
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Zusammenfassung der Verwendung der Python-Liste
Einfache Einführung in die Python3-Serie und OpenCV3
Zusammenfassung der Achsenoptionsspezifikation von Python "numpy.sum (...)"
Python-Aufzählungsfunktion
Python2.7 + CentOS7 + OpenCV3
Zusammenfassung des Python-Tutorials
Python> Funktion> Schließen
[Python] Generatorfunktion
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
OpenCV-Beispiele (Python)
[Hinweis] openCV + Python
Python> Funktion> Innere Funktion
Python-bezogene Zusammenfassung
Python-Funktionsdekorateur
Zusammenfassung der Python-Grundlagen
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Zusammenfassung der Korrespondenz zwischen Ruby- und Python-Array-Operationen
Beispiel für die Verwendung von Python> function> * args als Argument
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Holen Sie sich den Aufrufer einer Funktion in Python
Zusammenfassung der Verwendung von MNIST mit Python
Installation von Python 3 und Flask [Zusammenfassung der Umgebungskonstruktion]
[Python] Zusammenfassung der S3-Dateivorgänge mit boto3
Zusammenfassung häufig verwendeter Python-Arrays (für mich)
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
E / A-bezogene Zusammenfassung von Python und Fortan
[Python + OpenCV] Malen Sie den transparenten Teil des Bildes weiß
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
[Python] Operation der Aufzählung
Liste der Python-Module
[Sprachverarbeitung 100 Schläge 2020] Zusammenfassung der Antwortbeispiele von Python
Über Funktionsargumente (Python)
Python OpenCV Installation (Memo)
Zusammenfassung des Python Django-Tutorials
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
[Python of Hikari-] Kapitel 06-02 Funktion (Argument und Rückgabewert 1)
Funktionsausführungszeit (Python)