Impressum DatenschutzerklärungDiese Seite per HTTPS ansehen.


Farben mit der Webcam erkennen geschrieben am 09.05.2010

Des längeren habe ich hier eine Webcam herumstehen. Nun wird geklärt wie man Farben erkennen kann. Zur Umsetzung nutze ich Flash mit Actionscript 3, aber nach dem Prinzip kann man das auch in anderen Programmiersprachen umsetzen.

Als Ausgangsbild wurde folgendes Bild aufgenommen:

Für die Erkennung der Farben ist das Bild mit 640x480 Pixel etwas überdimensioniert und wird deshalb auf 80x80 Pixel reduziert:

Welche Farbe nun erkannt werden soll, wird mit einem Klick ins Bild festgelegt. In diesem Fall nehme ich den Grünwert des Flaschenöffners: 0x8aab36.

Dieser Wert wird in die einzelnen Farbkanäle getrennt und ein Low- und Hi-Wert berechnet. So wird nicht genau die Farbe erkannt sondern der Bereich von Low nach Hi.

Im nächsten Schritt wird das Bild in seine drei Bestandteile auf gesplittet:

Nun wird jeder Kanal mit der threshold - Funktion bearbeitet.

ActionScript3 function threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint

Diese Funktion füllt alle Pixel mit einem Farbwert (color) welche der Funktionsbedingung (operation) in Bezug auf die sourceBitmapData und dem threshold-Wert nicht erfüllt. Genaueres gibt es bei Adobe zu erlesen:
http://livedocs.adobe.com/.../BitmapData.html#threshold()

Hier werden jetzt alle Pixel die kleiner als der low-Farbwert werden mit 0 gefüllt (schwarz)

und alle die höher als der hi-Farbwert mit 0xFF (weiß) gefüllt

Als nächsten Schritt wird ein neues Bitmap mit dem höchsten pic-Farbwert (hier grün=0xab) erstellt und die anderen beiden davon abgezogen (BlendMode.SUBTRACT):

wie man sieht bleibt dann ein Fleck (hier etwas verdeutlicht) übrig den man in Flash mit getColorBoundsRectv detektieren kann.

Zum Schluss werden noch die Koordinaten auf das echte Webcam-Bild hoch rechnet (das Bild zur Erkennung wurde vorher ja reduziert) und ausgegeben:

Selbst bei diesen miesen Bild funktioniert das sehr gut mit dem Flaschenöffner und dem Cola-Deckel.

Das Projekt gibt es hier zum downloaden:
download: webcam.rar 10.08kb

Es enthält die swf, eine fla (Flash CS3) und das Script als Textdatei.

Im Script selbst wird im Blaukanal gearbeitet. zur Verdeutlichung wurden die Zwischenschritte hier in Graustufen dargestellt.

Theoretisch könnte man nun mehrere Farbflächen erkennen, dazu habe ich im Script die Erkennung in eine Funktion zusammen gefasst (function getPicArr).

Zum Ausprobieren hier die Anwendung:webcam_colorpic.swf
Wenn der Zugriff auf die Webcam gestattet wurde kann mittels klick auf eine Farbfläche im Video der Webcam diese im Video erkannt werden.
Für Optimierungen und Verbesserungen kannst Du mir unten gerne Vorschläge unterbreiten.

Und so siehts aus:

Kommentare:


#1 maxx schrieb am 16.02.2011 um 15:19
Tolle Lösung. Kann man das auch zu einem Farbsensor umbauen der Alarm schlägt wenn die Farbe sich ändert. Ich soll ein Farbband überprüfen dass immer wieder Fehlstellen aufweißt. Da kann stundenlang die richtige Farbe kommen, dann aber für ein paar Sekunden eine falsche Farbe. Kann auch ein wenig kosten.

#2 Michi schrieb am 14.06.2013 um 13:46
Hallo,

deine Seite ist super, ich versuche auch dasselbe hinzubekommen weil ich es für mein Porjekt brauche. Leider funktioniert opencv nicht unter Windows 8, wie machst du das?

lg michi

#3 Andreas schrieb am 14.06.2013 um 19:43
Hallo Michi,
opencv kannte ich noch nicht, ich habe bisher auch noch nichts mit C, Python oder Java gemacht.
Mit Win8 habe ich auch noch nichts gemacht, ich benutze Win7.
Vor langer Zeit hatte ich mal was in Delphi gemacht, das war knifflig bis es lief. Letztendlich hatte ich eine Windows-Schnittstelle benutzt - aber das war noch zu WinXP-Zeiten....

salü



Inhalt zur freien Verwendung gibs es beim Thema Downloads.
nach oben springen
mehr auf: Instagram, github, thingiverse