Inhaltsverzeichnis:

Einfache Farberkennung mit OpenCV - Gunook
Einfache Farberkennung mit OpenCV - Gunook

Video: Einfache Farberkennung mit OpenCV - Gunook

Video: Einfache Farberkennung mit OpenCV - Gunook
Video: Intelligente kameragestützte Farberkennung für autonome Pick & Place Anwendungen 2024, Juni
Anonim
Einfache Farberkennung mit OpenCV
Einfache Farberkennung mit OpenCV

Hi! Heute zeige ich eine einfache Methode zum Erkennen einer Farbe aus einem Live-Video mit OpenCV und Python.

Grundsätzlich werde ich nur testen, ob die erforderliche Farbe im Hintergrundrahmen vorhanden ist oder nicht, und mit OpenCV-Modulen werde ich diesen Bereich maskieren und gleichzeitig den Rahmen anzeigen.

Schritt 1: Die Header-Dateien

Die Header-Dateien
Die Header-Dateien

Jetzt habe ich hier zwei Header-Dateien verwendet, nämlich cv2 und NumPy. Grundsätzlich ist cv2 die OpenCV-Bibliothek, die alle C++-Dateien lädt, die bei der Verwendung der Befehle in den Codes wichtig sind (sie enthält alle Definitionen).

Und Numpy ist eine Python-Bibliothek, die zum Speichern eines mehrdimensionalen Arrays unerlässlich ist. Wir werden verwenden, um unsere Farbbereichskoordinaten zu speichern.

Und numpy als np hilft unserem Code im Grunde, ein wenig zu verkürzen, indem jedes Mal np anstelle von numpy verwendet wird.

Schritt 2: Aufnehmen des Videos

Aufnehmen des Videos
Aufnehmen des Videos

Dies ist bei der Verwendung von Python ziemlich einfach. Hier müssen wir nur den Videorecorder einschalten, damit er mit der Aufnahme der Frames beginnen kann.

Jetzt gibt der Wert im VideoCapture die Kamera an, in meinem Fall ist die Kamera mit meinem Laptop verbunden, also 0.

Sie können ähnlich wie bei 1 für die sekundäre Kamera usw. vorgehen. VideoCapture erstellt das Objekt dafür.

Schritt 3: Rahmen aufnehmen und Farbe definieren

Rahmen erfassen und Farbe definieren
Rahmen erfassen und Farbe definieren

Hier müssen wir jetzt etwas tun, damit wir den sofortigen Frame des Videos aufnehmen können, der uns hilft, das Bild zu extrahieren, und wir können daran nach Bedarf arbeiten.

Die Schleife "while" hilft uns, die Schleife zu unserer Anforderungszeit auszuführen. Jetzt wird " _, frame = cap.read() " verwendet, um die Gültigkeit des erfassten Frames zu überprüfen und zu speichern. "cap.read() ist eine boolesche Variable und gibt true zurück, wenn der Frame korrekt gelesen wird und wenn Sie keine Frames erhalten, wird kein Fehler angezeigt, Sie erhalten einfach None.

Jetzt definieren Zeile 11 und Zeile 12 im Wesentlichen den Farbbereich, den wir erkennen müssen. Dafür habe ich blaue Farbe verwendet.

Sie können mit jeder Farbe fortfahren, für die Sie nur BGR-Werte für diese bestimmte Farbe eingeben müssen. Es ist besser, zwei Arrays mit numpy-Arrays zu definieren, da das Erkennen einer bestimmten Farbe in der realen Welt unseren Zweck nicht erfüllt, sondern wir definieren einen Bereich blauer Farbe, damit er innerhalb des Bereichs erkennt.

Dazu habe ich zwei Variablen definiert, die die unteren BGR-Werte und die oberen BGR-Werte speichern.

Schritt 4: Maskieren und Extrahieren

Maskieren und Extrahieren
Maskieren und Extrahieren

Hier kommt nun die Hauptaufgabe, den Rahmen zu maskieren und die Farbe des Rahmens zu extrahieren. Ich habe die vordefinierten Befehle in der Bibliothek in OpenCV verwendet, um die Maskierung durchzuführen. Grundsätzlich ist das Maskieren der Vorgang, einen Teil des Frames zu entfernen, d.h. wir entfernen die Pixel, deren Farb-BGR-Werte nicht im definierten Farbbereich liegen, und dies wird von cv2.inRange durchgeführt. Danach wenden wir den Farbbereich abhängig von den Pixelwerten auf das maskierte Bild an und verwenden dafür cv2.bitwise_and. Es wird einfach die Farben dem maskierten Bereich abhängig von den Masken- und Farbbereichswerten zuweisen.

Link für cv2. bitwise_and:

Schritt 5: Endlich Anzeige

Endlich Anzeige!
Endlich Anzeige!

Hier habe ich die grundlegende cv2.imshow() zum Anzeigen für jeden Frame als Bild verwendet. Da ich die Rahmendaten in Variablen gespeichert habe, kann ich sie in imshow() abrufen. Hier habe ich alle drei Rahmen angezeigt, original, maskiert und farbig.

Jetzt müssen wir die while-Schleife verlassen. Dazu können wir einfach cv2.wait. Key() implementieren. Im Grunde gibt es die Wartezeit vor einer Antwort an. Wenn Sie also 0 übergeben, wird unendlich gewartet und 0xFF teilt mit, dass die Architektur 64-Bit ist. " ord() " gibt das Zeichen an, das beim Drücken den Break-Befehl im if-Block ausführt und aus der Schleife kommt.

Anschließend schließt cap.release() den Videorecorder und cv2.destroyAllWindows() schließt alle geöffneten Fenster.

Wenn Sie ein Problem haben, lassen Sie es mich bitte wissen.

Link zum Quellcode:

Empfohlen: