Sie sind auf Seite 1von 27

Universitt Stuttgart, Abteilung Intelligente Systeme

bungen Computer-Vision

Einfhrung in OpenCV

Sebastian Klenk

VIS06

berblick
Was ist OpenCV Installation
Installation Linux

Universitt Stuttgart, Abteilung Intelligente Systeme

Entwicklung mit OpenCV


OpenCV Namensgebung Einfache Datenstrukturen Elementare Operationen Bild Operationen Bildverarbeitungs Operationen

Beispielprogramm

VIS06

Einfhrung in OpenCV

05.05.09

Was ist OpenCV


Intel Open Source Computer Vision Library
Universitt Stuttgart, Abteilung Intelligente Systeme

Freie Nutzung (OSS und Kommerziell)

Programm Bibliothek fr Real-Time Computer Vision


Hauptschlich C-Funktionen, teilweise auch C++ Klassen Python-Anbindung teilweise mglich

Intel Integrated Performance Primitives (IPP) Integration

VIS06

Einfhrung in OpenCV

05.05.09

Was ist OpenCV (3)


Bilddatenmanipulation
Universitt Stuttgart, Abteilung Intelligente Systeme

Speicherallokation, Kopieren, Konvertieren, ...

Bild und Video I/O


Laden von Bildern und Videos aus Dateien oder Kameras, ...

Grundlegende Bildverarbeitungsroutinen
Filter, Kantenerkennung, Interpolation, ...

Strukturanalyse
Erkennung zusammenhngender Elemente, ...

Bewegungsanalyse
Erkennung und Verfolgung von Bewegungen, ...

Einfache grafische Benutzerschnittstelle


VIS06

Einfhrung in OpenCV

05.05.09

Was ist OpenCV (3)


Anwendungsgebiete
Universitt Stuttgart, Abteilung Intelligente Systeme

Mensch-Maschine Interaktion Objekterkennung Segmentierung Bewegungserkennung ...

VIS06

Einfhrung in OpenCV

05.05.09

Installation
Download
Universitt Stuttgart, Abteilung Intelligente Systeme

http://sourceforge.net/projects/opencvlibrary

Hilfestellung
<opencv-root>/INSTALL http://opencvlibrary.sourceforge.net/

Windows
Ausfhrbare Binrdatei

Linux
Quelltext muss erst kompiliert werden

VIS06

Einfhrung in OpenCV

05.05.09

Installation Linux
Voraussetzungen
Universitt Stuttgart, Abteilung Intelligente Systeme

GTK+ 2.x oder neuer (mit Header-Dateien) pkgconfig libpng, zlib, libjpeg, libtiff, libjasper (mit Header-Dateien) libavcodec (libffmpeg mit Header-Dateien)

Installation per RPM


rpmbuild -ta OpenCV-x.y.z.tar.gz
x.y.z entspricht der Versionsnummer

rpm -i OpenCV-x.y.z.rpm
Installiert OpenCV

VIS06

Einfhrung in OpenCV

05.05.09

Installation Linux (2)


Kompilieren und Installieren
Universitt Stuttgart, Abteilung Intelligente Systeme

tar xvzf OpenCV-1.0.0.tar.gz cd opencv-1.0.0/ ./configure make sudo make install sudo ldconfig

Umgebung einrichten
Verzeichnis /usr/local/lib zu LD_LIBRARY_PATH hinzufgen

VIS06

Einfhrung in OpenCV

05.05.09

Installation Linux (3)


Individuelle Anpassung durch configure-Flags
Universitt Stuttgart, Abteilung Intelligente Systeme

siehe: ./configure help

Test der Installation


make test

VIS06

Einfhrung in OpenCV

05.05.09

Entwicklung mit OpenCV


Header-Dateien
Universitt Stuttgart, Abteilung Intelligente Systeme

#include <cv.h> #include <cvaux.h> #include <highgui.h> #include <cxcore.h>

VIS06

Einfhrung in OpenCV

05.05.09

10

OpenCV Namensgebung
Funktionen
Universitt Stuttgart, Abteilung Intelligente Systeme

cvActionTargetMod (...)
Action: was passiert (get, update, create) Target: mit was passiert etwas (contour, image, history) Mod: optionale Modifier

Bild Typen
IPL_DEPTH_<bit_depth>(S|U|F)
IPL_DEPTH_8U bedeutet 8-bit unsigned Image. IPL_DEPTH_32F bedeutet 32-bit float Image.

VIS06

Einfhrung in OpenCV

05.05.09

11

Einfache Datenstrukturen
Bilddaten
Universitt Stuttgart, Abteilung Intelligente Systeme

IPLImage
int nChannels Anzahl der Farbkanle int depth Bildtiefe int width, height Hhe und Breite des Bildes in Pixel char* imageData Die eigentlichen Bilddaten int widthStep Breite einer Bildreihe in Byte

VIS06

Einfhrung in OpenCV

05.05.09

12

Einfache Datenstrukturen (2)


Initialisierung von Bilddaten
Universitt Stuttgart, Abteilung Intelligente Systeme

IplImage* cvCreateImage( CvSize size, int depth, int channels );

Freigabe von Bilddaten


void cvReleaseImage( IplImage** image );

Bilddaten kopieren
IplImage* cvCloneImage( const IplImage* image );

VIS06

Einfhrung in OpenCV

05.05.09

13

Einfache Datenstrukturen (3)


Punkte
Universitt Stuttgart, Abteilung Intelligente Systeme

CvPoint
int x int y

inline CvPoint cvPoint (int x, int y)


Funktion zur Erzeugung von Punkten

Skalare
CvScalar
double val[4];

inline CvScalar cvScalar( double val0,


double val1=0, double val2=0,

VIS06

double val3=0 );
Einfhrung in OpenCV 05.05.09 14

Einfache Datenstrukturen (4)


Matrizen
Universitt Stuttgart, Abteilung Intelligente Systeme

CvMat
int int int int type; step; rows, cols; height, width;

union data; Data abhngig vom Typ

VIS06

Einfhrung in OpenCV

05.05.09

15

Einfache Datenstrukturen (5)


Initialisierung von Matrizen
Universitt Stuttgart, Abteilung Intelligente Systeme

CvMat* cvCreateMat( int rows, int cols,


int type )

Initialisierung von Matrizen als Identitt


void cvSetIdentity(CvArr* mat)

VIS06

Einfhrung in OpenCV

05.05.09

16

Elementare Operationen
Bilddaten lesen
Universitt Stuttgart, Abteilung Intelligente Systeme

IplImage* img=cvLoadImage(fileName); Untersttzt viele Dateiformate


BMP, DIB, JPEG, JPG, JPE, PNG, PBM, PGM, PPM, SR, RAS, TIFF, TIF

Bilddaten schreiben
cvSaveImage(fileName,img);

VIS06

Einfhrung in OpenCV

05.05.09

17

Elementare Operationen (2)


Matrix/Vektor Operationen
Universitt Stuttgart, Abteilung Intelligente Systeme

void cvAdd (const CvArr* src1, const CvArr* src2, CvArr* dst); void cvSub (const CvArr* src1, const CvArr* src2, CvArr* dst); void cvMatMul (const CvArr* src1, const CvArr* src2, CvArr* dst); void cvMul (const CvArr* src1, const CvArr* src2, CvArr* dst); void cvDiv (const CvArr* src1, const CvArr* src2, CvArr* dst); Fr alle Operationen gilt: src1 x src2 -> dst

VIS06

Einfhrung in OpenCV

05.05.09

18

Elementare Operationen (3)


Elementare GUI
Universitt Stuttgart, Abteilung Intelligente Systeme

int cvNamedWindow (const char* name, int flags=CV_WINDOW_AUTOSIZE ); Erstellt ein einfaches Fenster void cvMoveWindow (const char* name, int x, int y ); void cvShowImage (const char* name, const CvArr* image ); Zeigt ein Bild im Fenster <name> an void cvDestroyWindow( const char* name );

VIS06

Einfhrung in OpenCV

05.05.09

19

Bild Operationen
Indirekter Zugriff auf die Bilddaten
Universitt Stuttgart, Abteilung Intelligente Systeme

CvScalar s=cvGet2D(img,i,j); printf("intensity=%f\n",s.val[0]); s.val[0]=111; cvSet2D(img,i,j,s);

... auf multi channel Bilder


CvScalar s=cvGet2D(img,i,j); printf("B=%f,G=%f,R=%f\n",s.val[0],s.val[1], s.val[2]); s.val[0]=111; cvSet2D(img,i,j,s);

VIS06

Einfhrung in OpenCV

05.05.09

20

Bild Operationen (2)


Direkter Zugriff
Universitt Stuttgart, Abteilung Intelligente Systeme

((uchar *)(img->imageData+i*img->widthStep))[j]=111;

... auf multi channel Bilder


((uchar *)(img->imageData+i*img->widthStep)) [j*img->nChannels + 0]=111; // B ((uchar *)(img->imageData+i*img->widthStep)) [j*img->nChannels + 1]=112; // G ((uchar *)(img->imageData+i*img->widthStep)) [j*img->nChannels + 2]=113; // R

VIS06

Einfhrung in OpenCV

05.05.09

21

Bild Operationen (3)


Direkter Zugriff per Pointer
Universitt Stuttgart, Abteilung Intelligente Systeme

int height int width int step int channels uchar* data

= img->height; = img->width; = img->widthStep/sizeof(uchar); = img->nChannels; = (uchar *)img->imageData;

data[i*step+j*channels+k] = 111;

VIS06

Einfhrung in OpenCV

05.05.09

22

Zeichen Operationen
Linie Zeichnen
Universitt Stuttgart, Abteilung Intelligente Systeme

void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color); Zeichnet eine Linie von <pt1> nach <pt2> die Farbe wird definiert durch das Makro CV_RGB( r, g, b ) void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed, CvScalar color); void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color); void cvPutText( CvArr* img, const char* text, CvPoint org,const CvFont* font, CvScalar color);

VIS06

Einfhrung in OpenCV

05.05.09

23

Bildverarbeitungs Operationen
Gauss-Kernel
Universitt Stuttgart, Abteilung Intelligente Systeme

void cvSmooth (const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, double param4=0);

Sobel-Filter
void cvSobel (const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3);

Laplace-Filter
void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3);

VIS06

Einfhrung in OpenCV

05.05.09

24

Beispielprogramm
Quelltext
Universitt Stuttgart, Abteilung Intelligente Systeme

Vorlesungshomepage

Kompilieren
gcc main.c -o main \ -I /usr/local/include/opencv -L /usr/local/lib -lm -lcv -lhighgui -lcvaux \

VIS06

Einfhrung in OpenCV

05.05.09

25

Beispielprogramm (2)
...
Universitt Stuttgart, Abteilung Intelligente Systeme
VIS06

Einfhrung in OpenCV

05.05.09

26

Weiter Informationen
Dokumentation
Universitt Stuttgart, Abteilung Intelligente Systeme

<opencv-root>/docs/index.html

Samples
<opencv-root>/samples/c/

Tutorials
http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html

http://www.cs.rit.edu/~gsp8334/ http://www.tetraedre.com/download/opencv/opencv_tutorial.pdf http://www.site.uottawa.ca/~laganier/tutorial/opencv+directshow/

VIS06

Einfhrung in OpenCV

05.05.09

27