2016-11-19 1 views
1

Ich bin neu in opencv mit Python und versuchen, die Form einer Kontur in einem Bild zu erhalten. Betrachtet man nur regelmäßige Formen wie Quadrat, Rechteck, Kreis und Dreieck, gibt es eine Möglichkeit, die Konturform nur mit numpy und cv2 Bibliotheken zu erhalten?Erkennen der Form einer Kontur und Farbe im Inneren

Auch ich möchte die Farbe innerhalb einer Kontur finden. Wie kann ich es tun?

Zum Finden der Fläche einer Kontur gibt es eine eingebaute Funktion: cv2.contourArea(cnt). Gibt es eingebaute Funktionen für "Konturform" und "Farbe Innenkontur"? Bitte helfen!

Hinweis: Die Bilder, die ich in Betracht ziehe, enthalten mehrere reguläre Formen.

+0

Ich habe den Teil der Identifizierung der Formen in einem Bild bekommen. Kann mir jemand helfen, die Farbe innerhalb einer Kontur zu identifizieren. hinweis: farbe innerhalb aller konturen sind einfarbig und nicht mehrfarbig dh in einer kontur ist es nur eine unter rot, blau, grün, gelb –

+0

In Bezug auf "Konturen in Konturen", können Sie 'findContours' eine Struktur zurückgeben, die die Hierarchie darstellt von Konturen gefunden. OpenCV hat ein [Tutorial] (http://docs.opencv.org/trunk/d9/d8b/tutorial_py_contours_hierarchy.html) zur Verwendung dieses. –

+0

@Dan Sie missverstanden Farbe als Kontur. Ich wollte eigentlich wissen, wie man Farbe in einer Kontur erkennt. –

Antwort

1

Diese Methode könnte länger sein, aber jetzt ist es auf dem Kopf. Mit der Funktion findcontours wird der Vektorpunkt als Ausgabe (Randpunkte von Konturen) ausgegeben. Finde jetzt das Zentrum der Kontur, benutze Momente.

für Kontur Verwendung finden diese funk-

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) 

Bild ist das schlaue Ausgangsbild.

berechnen Zentrum von Momenten, beziehen sich auf diesen Link http://docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html

berechnen Abstand jedes in Konturen gespeichert Punkt vom Zentrum nun durch Vergleichen Abstand der Punkte von der Mitte

1) förmigen klassifizieren Kreis - alle Konturen Punkte werden in etwa gleich weit von der Mitte sein.

2) Platz, Rectangl e- weiteste 4 Punkte vom Zentrum zu finden, werden diese Punkte Eckpunkte und wird ungefähr gleichen Abstand haben. Nun Quadrat von Rechteck unterscheidet mit Kantenlänge

3) Traingles - dies kann schwierig sein, für verschiedene Arten von Dreieck, so dass Sie nur sonst Bedingung hier verwenden können, da Sie nur 4 Formen haben

für die Suche Verwenden Sie die Scheitelpunkte für Quadrat, Rechteck und Dreieck, um eine Maske zu erstellen.

Da Sie nur eine einzelne Farbe haben, machen Sie einen kleinen Fleck um die Mitte herum und erhalten dort den Mittelwert von RGB-Pixeln. Angenommen, Sie haben Mitte bei (100,100) und es ist ein Kreis mit Radius 20 Pixel. Erstellen Sie ein Patch der Größe sagen 10 X 10, mit der Mitte bei (100,100) und finden Sie Mittelwert zu R, G und B-Werte in diesem Patch.

für Rot R ~ 255 G ~ 0 und B ~ 0

für grüne R ~ 0 G ~ 255 und B ~ 0

für Blau R ~ 0 G ~ 0 und B ~ 255

Hinweis: opencv speichert den Wert als BGR, nicht RGB

+0

danke für die Idee. Kannst du es bitte etwas genauer erklären, ich bin neu in all dem. Ich weiß nicht genau über die Verwendung der Funktionen. Danke im Voraus. –

+0

ich benutze opencv C++, du musst es selbst herausfinden für python –

0

Um die Form einer bestimmten Kontur zu finden, können wir ein begrenztes Rechteck um die Kontur zeichnen. Jetzt können wir den Bereich der Kontur mit der Fläche des begrenzten Rechtecks ​​vergleichen. Wenn die Fläche der Kontur gleich der Hälfte der Fläche des begrenzten Rechtecks ​​ist, ist die Form ein Dreieck. Wenn die Fläche der Kontur kleiner ist als die Fläche des begrenzten Rechtecks, aber größer als die Hälfte der Fläche des begrenzten Rechtecks ​​ist, dann ist dies ein Kreis.

Hinweis: Diese Methode ist auf das normale Dreieck und den Kreis beschränkt. das gilt nicht für Polygone wie Hexagon, Siebeneck usw.

Verwandte Themen