Schwarze Flecken auf Grafiken erkennen

the snake II

Erfahrenes Mitglied
Hallo,

ich arbeite Gerade an einem einfachen Touchpad zur Bedienung des Mauszeigers mit dem Finger.
Das Pad selber ist eine Glasplatte mit einem Blatt Papier. Darunter ist eine Webcam angebracht, die die Bewegungen auf dem Pad an den PC überträgt.

Mit einem OpenSource Delphi-Webcam Programm habe ich es bis jetzt soweit geschafft, dass ein einzelner Finger erkannt und lokalisiert werden kann.
Dazu wird die Belichtung und der Kontrast der Kamera so eingestellt, dass alles, was nicht Finger (oder ein starker Schatten auf dem Papier) ist, weiß ist.
Dann wird das Bild Pixelweise (je alle Y bei X) durchgegangen und das erste nicht-weiße Pixel sowie das letzte nicht-weiße Pixel, dass eingelesen wird, übergeben. Damit zeichne ich ein Rechteck, dessen mitte dann die Mausposition festlegt (Bild 1 im Anhang).

Das reicht mir aber noch nicht ;-) Ich brauche Multi-Touch, also die Möglichkeit, mehrere Finger auf einmal zu erkennen. Dass ich nicht mehrere Mauszeiger gleichzeitig ansteuern kann, ist mir klar, aber das ist ein anderes Problem.
Generell brauche ich die Möglichkeit, die Position bzw. die Größe jedes Objektes auf dem Pad zu bestimmen, auch, um zu große Objekte als Schatten des Handballens oder ähnliches zu identifizieren.
Dabei funktioniert der obenstehende Code natürlich nicht; er führt zu dem Ergebnis in Bild 2.

Mir fehlt jetzt der Ansatz, wie ich feststellen kann, ob die Bereiche des Bildes, die nicht weiß sind, zu einem "Fleck" gehören, oder zu verschiedenen, also ob dazwischen noch weiße Fläche ist.
 

Anhänge

  • case1.jpg
    case1.jpg
    1,8 KB · Aufrufe: 37
  • case2.jpg
    case2.jpg
    2,4 KB · Aufrufe: 39
Zuletzt bearbeitet:
Ist ein solches Eingabeprinzip nicht von einer Apfel-Firma patentiert? ;)

Ich würde den Algorithmus anders angehen:
1. Durchsuche die Eingabe in einem Raster (muss ja nicht pixelweise sein) nach einem schwarzen Punkt.
2. Prüfe, ob in der Umgebung (z. B. ±10 Pixel) genügend (z. B. 50%) dunkle Pixel vorhanden sind. Wenn ja: Finger gefunden :)
3. Weiter mit 1 und finde weitere Finger

Mamphil
 
Zurück