Vom Bildanzeiger bis zur Gesichtserkennung Grafikverarbeitung mit OpenCV

Autor / Redakteur: Mirco Lang / Stephan Augsten

Viele Bibliotheken vereinfachen dem Entwickler die Arbeit ungemein, dies gilt auch für die Open Cource Computer Vision Library. OpenCV bietet über 2.500 Algorithmen rund um die Verarbeitung und Analyse von Bildmaterial.

Anbieter zum Thema

Als offene Bibliothek für die Bildverarbeitung bietet OpenCV diverse Zusatzmodule, beispielsweise für die Gesichtserkennung.
Als offene Bibliothek für die Bildverarbeitung bietet OpenCV diverse Zusatzmodule, beispielsweise für die Gesichtserkennung.
(Bild: teguhjatipras - Pixabay.com / CC0 )

OpenCV gibt es bereits seit 1999, initiiert von Intel in Russland. Von 2008 an hat dann Willow Garage das Projekt betrieben, dann hat Itseez übernommen – bis Intel im Jahr 2016 wiederum Itseez übernommen und damit auch OpenCV wieder zurück ins eigene Haus geholt hat.

Die Bibliothek wird als Open-Source-Projekt gepflegt und hat eine sehr aktive Community; beispielsweise wurden beim letztjährigen Google Summer of Code gleich mehrere Projekte durchgeführt. Die letzten Releases 3.3 und 3.4 stammen aus August und Dezember 2017. Und erfreulicherweise ist OpenCV zudem noch sehr gut dokumentiert – oder sagen wir: sehr umfangreich.

Die API hat gleich mehrere (automatisierte) Dokumentationen in unterschiedlichen Versionsständen und mit unterschiedlichen Informationen. Beispielsweise finden sich teils nur die C++-Notationen, in anderen Versionen gibt es auch die für viele wichtige Python-Syntax, etwa in der aktuellen Doxygen-HTML-Version. Hinzu gesellen sich etliche offizielle sowie inoffizielle Artikel und Code-Beispiele zu einzelnen Anwendungsszenarien, die qualitativ und bezüglich des benötigten Vorwissens natürlich stark variieren.

Die enorme Menge an Funktionen und die entsprechend umfangreiche und verzweigte Dokumentation verlangen nach einer gründlichen Einarbeitung – aber die lohnt sich! Eine deutliche Erleichterung bieten die vielen Zugriffsmöglichkeiten. OpenCV basierte anfangs auf C, mittlerweile auf C++.

Es gibt Schnittstellen für C++, C, Python, Java und MATLAB, hinzu gesellen sich Wrapper für C#, Ch, Perl, Haskell und Ruby. Und das Ganze gibt es für Windows, Linux, macOS, Android, iOS, BlackBerry und diverse BSD-Varianten. Insofern sollte fast jeder Entwickler einen Zugang zu OpenCV bekommen, ohne gleich ganz neue Grundlagen abseits der eigentlichen Bibliotheksfunktionen erlernen zu müssen.

OpenCV hat einen Fokus auf Echtzeitverarbeitung und unterstützt sowohl CUDA als auch OpenCL und ist damit auch für zeitkritische Anwendungen bestens geeignet – im Allgmeinen gilt OpenCV als ausgesprochen schnell.

Was kann OpenCV ganz konkret?

Die Bibliothek ist modular aufgebaut und bereits die Lektüre der ersten Seiten der Dokumentation zeigt die Vielfältigkeit der Funktionen. Zu den Hauptmodulen gehören etwa die Bereiche Image Processing, Video I/O, High-level GUI, Object Detection, Image Stitching, Video Encoding/Decoding sowie Video Stabilization – und auch eines der heute angesagtesten Tech-Themen hat sein eigenes Modul: Machine Learning ist ein wichtiger Bestandteil von OpenCV.

Hinter diesen Modulen stecken oft erstaunlich einfache wie praktische Funkionen (oder auch weitere Listen mit Modulen). Im Bereich Image Processing tummeln sich zum Beispiel allerlei Untermodule wie Image Filtering. Und darin finden sich nun selbst Endanwendern von Grafikprogrammen bekannte Tools wie Gauß-Filter oder Morphing.

Noch grundlegender wird es im Bereich Drawing. Hier finden sich Aufrufe zum Zeichnen von Linien, Punkten, Ellipsen und Rechtecken oder auch zum Platzieren von Text. OpenCV beginnt also mit absoluten Grafik-Basics. Aber natürlich wird die 2D-Bildverarbeitung noch deutlich weiter getrieben. Zum Beispiel befinden sich im Bereich „Computational Photography“ alle Funktionen zur Erstellung von High-Dynamic-Range-, also HDR-Bildern – inklusive der üblichen Tonemapping-Algorithmen wie Mantiuk, Durand oder Drago.

Bildergalerie

Ein schönes Beispiel dafür, wie OpenCV alltägliche Aufgaben vereinfachen kann, ist der Bereich Video I/O: Über die Klasse „VideoCapture“ lässt sich der Stream einer Webcam abgreifen und als Live-Bild in einem Fenster darstellen – mit Python sind dafür gerade einmal sieben sehr kurze Zeilen Code notwendig. Auch dank der High-level GUI.

Das High-level-GUI-Modul kann Fenster erstellen, die Ergebnisse der OpenCV-Verarbeitung umgehend darstellen können. Wenn Sie etwa komplexe HDR-Berechnungen durchführen und Tonemapping anwenden, dürfen Sie die gerenderten Ergebnisse direkt im Desktop-Fenster betrachten, ohne extra Fenster und Fensterlelemente anlegen zu müssen.

Bereits diese Hauptmodule bieten auch komplexe Operationen wie die Erkennung von Objekten, Vergleiche von Bildern oder Bewegungsanalyse in Video-Streams. Aber es gibt noch eine ganze Reihe an speziellen Funktionen, die sich über Zusatzmodule integrieren lassen.

(ID:45278928)