OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer...

21
Rechen- und Kommunikationszentrum (RZ) OpenCV in a Nutshell Seminarvortrag im Studiengang Scientific Programming

Transcript of OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer...

Page 1: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

Rechen- und Kommunikationszentrum (RZ)

OpenCV in a Nutshell

Seminarvortrag im Studiengang Scientific Programming

Page 2: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 21. Oktober 2010

Was ist OpenCV?

Beispielcode

Datenstruktur: IplImage

Bildmanipulationen / Filter

Bildtransformationen

Bildanalyse

Ausblick

Inhalt

Page 3: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 31. Oktober 2010

Was ist OpenCV?

OpenCV steht für: open source computer vision library

BSD-Lizenz

Frei für die private, akademische und kommerzielle Benutzung

Was Kann OpenCV?

Bibliothek zur Bildverarbeitung

ca. 500 Funktionen

Portabel (write once, compile everywhere)

Warum OpenCV?

Versuch der Standardisierung der Bildverarbeitung

Weite Verbreitung bei Firmen (Intel, Microsoft, Sony, Google, …) und

Forschungseinrichtungen (Stanford, MIT, Cambridge, …)

Was ist OpenCV?

Page 4: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 41. Oktober 2010

cv.h

Bildverarbeitungsalgotithmen

highgui.h

Ein- und Ausgabe

cxtxpes.h, cxcore.h

Grundlegende Datentypen

Bereits in den anderen Headern

eingebunden

ml.h

cvaux.h

Headerdateien

Page 5: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 51. Oktober 2010

int main(int argc, char** argv){

CvCapture *cap = cvCreateCameraCapture(0);

IplImage* img = cvQueryFrame(cap);

int key = -1;

while(key < 0){

key = processImage(img);

img = cvQueryFrame(cap);

}

cvReleaseCapture(&cap);

}

Beispielcode

Page 6: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 61. Oktober 2010

int processImage(IplImage* img)

{

int key = cvWaitKey(50);

CvRect center = cvRect(3*img->width/8, 3*img->height/8, img->width/8, img->height/8);

CvRect target = center;

static IplImage *tpl = cvCreateImage(cvSize(center.width, center.height), img->depth, img->nChannels);

static IplImage *dst = cvCreateImage(cvSize(img->width-tpl->width+1, img->height-tpl->height+1), IPL_DEPTH_32F, 1);

switch(key){

case -1: break;

case 27:

cvReleaseImage(&tpl);

cvReleaseImage(&dst);

return 1;

case 32:

cvSetImageROI(img, center);

cvCopy(img, tpl);

cvResetImageROI(img);

break;

default:

printf("KeyPressed %d \n", key);

break;

}

cvMatchTemplate(img, tpl, dst, CV_TM_SQDIFF_NORMED);

Beispielcode (2)

Page 7: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 71. Oktober 2010

CvPoint min_loc, max_loc;

double min_val, max_val;

cvMinMaxLoc(dst, &min_val, &max_val, &min_loc, &max_loc);

target.x = min_loc.x;

target.y = min_loc.y;

if(min_val < 0.1){

cvSetImageROI(img, target);

cvAddWeighted(img, 0.25, tpl, 0.75, 1.0, tpl);

cvResetImageROI(img);

}else{

cvSetImageROI(img, target);

cvAddWeighted(img, 0.05, tpl, 0.95, 1.0, tpl);

cvResetImageROI(img);

}

cvRectangleR(img, target, CV_RGB(255,0,0), 1);

cvRectangleR(img,center, CV_RGB(0,255,0), 1);

cvShowImage("Input",img);

cvShowImage("Output",dst);

cvShowImage("Template", tpl);

return -1;

}

Beispielcode (3)

Page 8: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 81. Oktober 2010

Grundlegende Datenstruktur

Kann Bildinformationen in verschiedenen Farbräumen speichern.

Räume: RGB, HSL, HSV, Grauwerte, …

Datentypen: char (signed und unsigned), int und float

Wird intern als Matrix von Pixeln behandelt

Standard Matrix-Operationen (Addieren, Multiplizieren, …) verfügbar

Pixel sind i.d.R. jedoch nicht im mathematischen sinne Skalar.

Ipllmage

Quelle: Wikipedia, HSL and HSV / RGB color model

Page 9: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 91. Oktober 2010

Initialisieren:

IplImage* cvLoadImage(const char*)

IplImage* cvCreateImage(CvSize, int, int)

Darstellen

cvShowImage(const char*, IplImage*)

cvSaveImage(const char*, IplImage*)

Speicher Freigeben

void cvReleaseImage(IplImage**)

IplImage (2)

Page 10: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 101. Oktober 2010

Abbildung von einem Ur-Bild I auf ein Ziel-Bild E

Ein Pixel im Ziel-Bild wird aus einem Pixel und seiner Umgebung im Ur-Bild

berechnet.

Die Umgebung nennt sich Kernel, die Position des Ur-Pixels im Kernel nennt

sich Anker.

Aufgabe: Hervorheben von Merkmalen im Urbild

Kanten hervorheben

Bildstörungen beseitigen

Flächen vereinheitlichen

Bildmanipulationen / Filter

y)})K(x, ji, | j)F({I(i, y)E(x,

Page 11: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 111. Oktober 2010

Bildmanipulationen / Filter (2)

255255

255

255

255

0

0

255

255

255

255

255

1/9 1/9 1/9

1/9 1/9

1/9 1/9 1/9

1/9

255255226

255

255

255

0

0

255

255

255

255

255

255226

255226

255

255

255

0

0

255

255

255

255

255

255226

255226

255

255

255

0

0

255

255226

255

255

255

255226

255226

255198

255

255

0

0

255

255226

255

255

255

255226

255226

255198

255

255

0198

0

255

255226

255

255

255

255226

255226

255198

255

255

0198

0

255

255226

255198

255

255

226226

198

198

226

198

198

226

226

198

198

226

Page 12: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 121. Oktober 2010

Kanten hervorheben: cvLaplace

Bildstörungen verringern: cvSmooth

Flächen vereinheitlichen: cvDelate, cvErode

Bildmanipulationen / Filter (3)

Page 13: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 131. Oktober 2010

Globale Änderungen an den Eigenschafen des Bildes

Farbraum

Breite

Höhe

Geometrie

Aufgabe: Verbesserung der Bildanalyse in Genauigkeit oder

Zeitaufwand

Halbierung der Breite und Höhe geht Quadratisch in die Fläche und damit in

den Rechenaufwand ein.

Anpassung des Aufgenommenen Bildes an die Geometrie der Kameralinse

Andere Farbräume bieten andere Informationen

Bildtransformationen

Page 14: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 141. Oktober 2010

Farbraumumwandlung: cvCvtColor

Kamerageometrie: cvAffineTransform, cvPerspectiveTransform

Bildtransformationen (2)

Page 15: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 151. Oktober 2010

Finden von Punkten (Punktmengen) mit bestimmten Merkmalen

Vergleich mit Vorlagen direkt (Pixelweise) oder über Formen bzw. Farben

(Histogramme)

Finden zusammengehöriger Bildteile als Fläche oder Kontur

Aufgabe: Identifizieren von Objekten in Bildern

Konturen

Linien

Segmente

Ähnlichkeit

Bildanalyse

Page 16: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 161. Oktober 2010

Konturen: cvFindContours

Linien: cvHoughLines2

Bildanalyse (2)

Page 17: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 171. Oktober 2010

Segmente

Farbbasiert: cvPyramidSegmentation

Unterschiedsbasiert: cvAbsDiff

Bildanalyse (3)

Page 18: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 181. Oktober 2010

Ähnlichkeiten

Farbbasiert: cvCompareHist

Pixelbasiert: cvMatchTemplate

Bildanalyse (3)

Page 19: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 191. Oktober 2010

Augmented Reality

Recognizr für Android ARf, Virtual Pet für das iPhone

Robotik: NAO

Ausblick

Page 20: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 201. Oktober 2010

Bildverarbeitung

Jähne, Prof. Dr. B.: Digitale Bildverarbeitung. 5. Auflage. Springer-Verlag

Berlin, 2002. ISBN 3-540-51260-3

Bildverarbeitung mit OpenCV

Bradski, Gary ; Kaehler, Adrian: Learning OpenCV. First. Sebastopool, CA :

O'Reilly Media Inc., 2008 http://oreilly.com/catalog/9780596516130. ISBN

978-0-596-51613-0

OpenCV Referenz

Willow Garage Inc. (Hrsg.): OpenCV Reference Manual v2.1.

http://opencv.willowgarage.com/documentation/c/index.html

Bradski, Gary u. a. ; Willow Garage Inc. (Hrsg.): OpenCV Wiki.

http://opencv.willowgarage.com/wiki/

Ausblick (2)

Page 21: OpenCV in a Nutshell - m.politze.net fileWas ist OpenCV? OpenCV steht für: open source computer vision library BSD-Lizenz Frei für die private, akademische und kommerzielle Benutzung

RZ: Marius Politze Folie 211. Oktober 2010

Fragen?