Einführung in openCV
Um das
Bildverarbeitungsprogramm openCV in Microsoft
Visual Studios zu nutzen, ist hier eine auführliche Anleitung
beigefügt, in der man step by step durch die Einrichtung der
Bildverarbeitungsbibliothek geführt wird.
data/Anleitung Inbetriebnahme SP_KO.pdf
Der gesamte Quellcode mit den Header- und Quelldateien ist im
Kapitel
Quellcode
hinterlegt.
1. Hauptprogramm
Wie schon in dem Kapitel
ausgewählte Lösungen beschrieben, wurde eine "dummy main"
geschrieben, die das Hauptprogramm simulieren soll. In dieser main
wird die Klasse CCameraDetection und die ausgelagerte Funktion mouseKlick implementiert. Die
in den Klassen enthaltenen Funktionen werden ausführlich in diesem Kapitel erläutert. In der main
werden zunächst Parameter, wie die Framegröße, Kameraauswahl, die
Matrixgröße und der Skalierungsfaktor vom Benutzer definiert.
Anschließend wird ein Objekt der Klasse CCameraDetection
erstellt. In diesem Objekt befinden sich alle nötigen Parameter und
Funktionen für die Bildverarbeitung. Die
setUpCamera-Funktion dient zur Positionierung und Ausrichtung der
Kamera, sowie zur Kalkulation der Perspektiventransformation. Hier
muss der Benutzer das zu detektierende Feld im Bildbereich
eingrenzen. Hilfreich dabei könnte sein, dass alle Pixel dafür
eingeschaltet werden.
Nachdem die Kamera ausgerichtet ist,
können nun einzelne Swimming Pixel nacheinander detektiert werden.
Hierfür wird die detect-Funktion in einer Dauerschleife aufgerufen.
Flussdiagramm main :
2. setUpCamera Funktion
In der setUp Funktion
wird der Benutzer mit Hilfe der Konsolenausgabe Stück für Stück
aufgefordert, den zu detektierenden Bereich einzugrenzen.
Der Benutzer wird aufgefordert eine Fluchtlinie
einzuzeichnen, um damit die Perspektiventransformation zu
ermöglichen. Nachdem eine Fluchtlinie per Mausklick in dem SetUp
Fenster erstellt wurde, wird automatisch die zweite Fluchtlinie
passend zur ersten erstellt, indem diese gespiegelt wird. Das setzt
vorraus, dass die Kamera mittig positioniert werden sollte. Im
Anschluss wird nach der oberen Begrenzungslinie gefragt, welche
ebenso per Mausklick erstellt wird. Diese sollte auf die Position
des am weitesten entfernten Pixel gelegt werden.
Nachdem der Bildbereich von dem Benutzer definiert wurde, werden
die Eckpunkte des Trapez berechnet und im Anschluss mit der
warpPerspective-Funktion in eine Draufsicht-Perspektive
umtransformiert.
Flussdiagramm setUp-Funktion :
3. detect Funktion
In der neu erstellten
Perspektive sollen nun die Swimming Pixel erkannt werden. Dafür wird
von der Vogelperspektive ein Threshold (Schwellenwert) image
erstellt. Mit Hilfe des Trackbars können nun die HSV Werte verändert
werden, um die Pixelfarbe zu detektieren.
Um später eine bessere
Positionierung des Pixels zu erhalten, wird mit der openCV
Funktion dilate die erkannten Objekte aus dem Threshold image
aufgefüllt, um im Falle des erkannten Pixel, einen geschlossenen
Kontur zu erhalten. Da jedoch ebenso Objekte aufgefüllt werden,
welche nicht erkannt werden sollen, wird mit der openCV Funktion
erode dieselbe Größe abgetragen. Im Anschluss wird erneut mit der
erode Funktion von der Kontur abgetragen und wieder mit der dilate
Funktion aufgetragen. Dadurch erhält man bei richtiger Anwendung der
Funktionen eine realitätsgetreue Kontur des Pixel in dem Threshold
image.
Nach der Bereinigung des Threshold image wird mathematisch der
Mittelpunkt der erkannten Fläche errechnet und in Form eines Kreises
in dem Originalbild ausgegeben. Mit Hilfe dieses Punktes wird später
im Programm die Position des Pixels in der Matrix bestimmt.
Die Matrix wird in dem zuvor vom Benutzer festgelegten Bildbereich
erstellt. Dabei werden mit einer for-Schleife die horizontalen
Linien und mit einer weiteren Schleife die vertikalen Linien der
Matrix erzeugt. Bei der Erzeugung der Linien wird gefragt, ob sich
der Mittelpunkt innerhalb der Linie und der vorherigen liegt. Somit
wird die Position des Pixel innerhalb der Matrix bestimmt.
Flussdiagramm detect-Funktion :
Ausgabe der Position des Pixels in der Matrix :
|