OpenCV - Open Source Computer Vision Library

Document Sample
OpenCV - Open Source Computer Vision Library
OpenCV - Open Source Computer Vision Library



Alexander Kubias



17. Mai 2005







Institut fur Computervisualistik

¨

a

Universit¨t Koblenz-Landau

a

Universit¨tsstraße 1, 56070 Koblenz

kubias@uni-koblenz.de

http://www.uni-koblenz.de/∼kubias

¨

Ubersicht



t Einleitung

t Grundlagen

t Programmierung

t Image Processing

t Dynamische Datenstrukturen









Alexander Kubias – OpenCV - Open Source Computer Vision Library 1

Einleitung



t OpenCV wurde fur PCs mit Intel-Architektur entwickelt.

¨

t Algorithmen wurden fur Intel-Architektur optimiert.

¨

t OpenCV gibt es fur Linux und Windows.

¨

t OpenCV basiert auf der Image Processing Library (IPL) und

erweitert diese um komplexere Funktionen.

t OpenCV kann frei von Kosten genutzt, ver¨ndert und

a

weitergegeben werden.









Alexander Kubias – OpenCV - Open Source Computer Vision Library 2

Grundlagen - Anwendungsbereiche



t Human-Computer Interaction (HCI)

t Objekt-Identifikation

t Segementierung

t Gesichts-Erkennung

t Gesten-Erkennung

t Tracking von Bewegungen

t Struktur aus Bewegung

t Mobile Roboter









Alexander Kubias – OpenCV - Open Source Computer Vision Library 3

Grundlagen - Funktionsumfang



t Bildfunktionen: Erzeugen und Zerst¨ren von Bildern

o

t Datenstrukturen: Statische Typen und Dynamsiche Speicherung

t Kontur-Verarbeitung: Finden, Anzeigen und Manipulieren von

Bildkonturen

t Geometrie: Konvexe Hulle, Linien und Ellipsen Fitting

¨

t Features: Kanten, Ecken

t Bildstatistik: Mittelwert, Norm, Momente

t Pyramiden-Segmentierung

t Morphologie: Erosion, Dillatation, Open, Close, Top-Hat,

Black-Hat



Alexander Kubias – OpenCV - Open Source Computer Vision Library 4

Grundlagen - Funktionsumfang



t Schwellwert-Bildung

t Kamerakalibrierung und 3D-Rekonstruktion

t Optischer Fluss: Blockmatching u.a.

t Bewegungsanalyse und Objektverfolgung (Tracking)

t Sch¨tzer: Kalman

a

t Histogramm-Funktionen

t HMM

t Matrix Mathematik

t Zeichenfunktionen





Alexander Kubias – OpenCV - Open Source Computer Vision Library 5

Grundlagen - Aufbau der Bibliothek



t Die Bibliothek setzt sich aus vier großen Teilen zusammen:

­ Eigentliche CV-Funktionalit¨t (cv.h)

a

­ Experimentelle CV-Funktionalit¨t (cvaux.h)

a

­ GUI-Funktionalit¨t (highgui.h)

a

­ Basisstrukturen und Basisoperationen (cxcore.h)

t Fur jeden der vier Bereiche gibt es eine eigene Referenz, die im

¨

Unterverzeichnis docs zu finden ist: opencvref cv.htm,

opencvref cvaux.htm, opencvref cxcore.htm und

opencvref highgui.htm









Alexander Kubias – OpenCV - Open Source Computer Vision Library 6

Grundlagen - Aufbau der Bibliothek



t Durch die vier Dokumentationsreferenzen ist ersichtlich, welche

Funktion im welchem Modul definiert ist.

t Dies ist wichtig zu wissen, damit man die richtige Headerdatei

einbindet:



#include

#include

#include

#include





t Ferner muss man beim Linken der Programme die richtigen

Bibliotheken dazulinken.





Alexander Kubias – OpenCV - Open Source Computer Vision Library 7

Grundlagen - OpenCV Ressourcen



t Offizielle Webseite ist:

http://www.intel.com/research/mrl/research/opencv/

t Newsgroup: http://groups.yahoo.com/group/OpenCV

t Download: http://sourceforge.net/projects/opencvlibrary









Alexander Kubias – OpenCV - Open Source Computer Vision Library 8

Grundlagen - Installation



t Installation von OpenCV in der Version 0.9.6 ist im Dokument

aufbau seu ausfuhrlich beschrieben.

¨









Alexander Kubias – OpenCV - Open Source Computer Vision Library 9

Grundlagen - Compilieren und Linken



t Compilieren und Linken



gcc -I/usr/local/include/opencv -L/usr/local/lib

-lopencv -lcv -lcvaux -lhighgui -lcxcore

-lstdc++ main6.cpp -o main6









Alexander Kubias – OpenCV - Open Source Computer Vision Library 10

Programmierung - Datenformat fur Bilder

¨



t IplImage heißt das Datenformat fur Bilder, welches aus der IPL

¨

stammt.

t OpenCV nutzt dieses Format, aber verwendet aber nur eine

Untermenge der Spezifikation.

t IplImage:

typedef struct _IplImage

{

int nSize; /* sizeof(IplImage) */

int nChannels; /* 1-4 channels */

int depth; /* pixel depth in bits */

int origin; /* 0 - top-left origin,

1 - bottom-left

origin */



Alexander Kubias – OpenCV - Open Source Computer Vision Library 11

Programmierung - Datenformat fur Bilder

¨



int width; /* image width in pix. */

int height; /* image height in pix.*/

char *imageData; /* pointer to aligned

image data */

int widthStep; /* size of aligned image

row in bytes */

...

}

IplImage;









Alexander Kubias – OpenCV - Open Source Computer Vision Library 12

Programmierung - Erzeugen eines Bildes



t Erzeugen eines leeren Bildes

t Beispiel:



#include

int main(){

IplImage* im;

im = cvCreateImage(cvSize(512,256),

IPL_DEPTH_8U, 3);

}

/* Image 512 x 256

8 bit Tiefe

a

3 Kan¨le */







Alexander Kubias – OpenCV - Open Source Computer Vision Library 13

Programmierung - Erzeugen eines Bildes



t Bildtiefe:

­ 8u, 8s, 16s, 32s, 32f, 64f

­ u=unsigned,s=signed,f=float

t Kan¨le:

a

­ 1 Kanal: Grauwertbild

­ mehr als 1 Kanal: Farbbild

t Bildspeicherplatz freigeben:



cvReleaseImage(&im);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 14

Programmierung - Kopieren eines Bildes



t cvCloneImage

t Beispiel:



IplImage* im;

im = cvLoadImage("example.jpg",1);

IplImage* im2 = cvCloneImage(im);

}









Alexander Kubias – OpenCV - Open Source Computer Vision Library 15

Programmierung - Laden und Speichern



t Laden und Speichern eines Bildes

t Formate: jpeg, png und pgm

t Beispiel:



#include

int main(){

IplImage* im;

im = cvLoadImage("example.jpg",1);

/* 1 = 3 Kan¨le,

a

0 = 1 Kanal,

-1 = Automatisch */

cvSaveImage("example2.jpg",im);

}





Alexander Kubias – OpenCV - Open Source Computer Vision Library 16

Programmierung - Zugriff auf Pixel



t Zugriff auf Pixel eines Bildes:



IplImage* im = 0;

im = cvCreateImage(cvSize(100,50),

IPL_DEPTH_8U, 3);

int count = im->width * im->height;

for(int i = 0; i imageData[i*3] = 60;

im->imageData[i*3+1] = 0;

im->imageData[i*3+2] = 127;

}









Alexander Kubias – OpenCV - Open Source Computer Vision Library 17

Programmierung - GUI



t Anzeigen des Bildes in einem Fenster

t Warten auf Tastendruck

t Beispiel:



cvNamedWindow("my window", CV_WINDOW_AUTOSIZE);

cvShowImage("my window", im);

cvWaitKey(0);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 18

Programmierung - Basisstrukturen



t CvPoint: 2D Punkt mit ganzzahligen Koordinaten



CvPoint myPoint = cvPoint(10, 20);

int x = myPoint.x;

int y = myPoint.y;





t Daneben gibt es noch die Datentypen: CvPoint2D32f und

CvPoint3D32f









Alexander Kubias – OpenCV - Open Source Computer Vision Library 19

Programmierung - Basisstrukturen



t CvSize: Breite und H¨he eines Bildes

o



CvSize mySize = cvGetSize(im);

int width = mySize.width;

int height = mySize.height;





t Daneben gibt es noch den Datentyp: CvSize2D32f









Alexander Kubias – OpenCV - Open Source Computer Vision Library 20

Programmierung - Basisstrukturen



t CvRect: Gr¨ße und Offset eines Rechtecks

o

t Setzen des ROI (rectangle of interest): cvSetImageROI

t Ermitteln des ROI eines Bildes: cvGetImageROI

t Beispiel: Kopieren eines Bildausschnitts in ein kleineres Bild



CvRect rect = GetImageROI(im);

cvSetImageROI(im, rect);

cvCopy(im, smallImage, 0);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 21

Programmierung - Basisstrukturen



t CvScalar: 1-,2-,3-,4-Tupel



CvScalar scal;

double value = scal.val[0];



t CvMatrix: Matrix



float data[2][3];

CvMat Mat = cvMat(2, 3, CV_32F, data[0]);



t CvArr: Allgemeine Form fur CvMatrix oder IplImage

¨









Alexander Kubias – OpenCV - Open Source Computer Vision Library 22

Programmierung - Operationen auf Matrizen



t Funktionen zum Skalieren der Bilder: cvConvertScale

t Funktionen fur elementweise Operationen: cvAdd, cvSub,

¨

cvMul

t Weitere Funktionen: cvNorm, cvMin, cvMax, cvSum,

cvAvg









Alexander Kubias – OpenCV - Open Source Computer Vision Library 23

Programmierung - Zeichnen von Primitiven



t CV RGB: Erzeugt einen Farbwert

t cvLine: Zeichnet eine Linie



void cvLine( CvArr* img, CvPoint pt1,

CvPoint pt2, CvScalar color,

int thickness=1, int line_type=8,

int shift=0 );





t cvRectangle: Zeichnet ein Rechteck

t Beispiel:



cvRectangle(im, cvPoint(100,300),

cvPoint(150,700), CV_RGB(255,0,0), 3);



Alexander Kubias – OpenCV - Open Source Computer Vision Library 24

Programmierung - Zeichnen von Primitiven







t cvEllipse: Zeichnet ein Rechteck

t Beispiel:



cvEllipse(im, cvPoint(350, 350),

cvSize(50, 30), 45.0, 0, 300,

CV_RGB(220,150,20), CV_FILLED);





t Es gibt noch Funktionen, um Kreise, Polygone usw. zu zeichnen

und um Text auf ein Bild auszugeben.









Alexander Kubias – OpenCV - Open Source Computer Vision Library 25

Programmierung - Zeichnen von Primitiven









Alexander Kubias – OpenCV - Open Source Computer Vision Library 26

Image Processing - Gradienten, Kanten und Eckpunkte



t cvSobel

t cvLaplace

t cvCanny

t cvPreCornerDetect









Alexander Kubias – OpenCV - Open Source Computer Vision Library 27

Image Processing - Gradienten, Kanten und Eckpunkte



t cvLaplace



im2 = cvCreateImage(cvGetSize(im),

IPL_DEPTH_16S, 1);

cvLaplace(im, im2);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 28

Image Processing - Gradienten, Kanten und Eckpunkte



t cvGoodFeaturesToTrack: Findet starke Eckpunkte im Bild

t Beispiel:

IplImage* img = cvLoadImage(filename, 0);

CvSize size = cvGetSize(img);

int count_features = 400;

CvPoint2D32f features[400];

IplImage* eig_image =

cvCreateImage(size, IPL_DEPTH_32F,1);

IplImage* temp_image =

cvCreateImage(size, IPL_DEPTH_32F,1);

cvGoodFeaturesToTrack(img, eig_image,

temp_image, features,

&count_features, 0.01, 0.01);



Alexander Kubias – OpenCV - Open Source Computer Vision Library 29

Image Processing - Gradienten, Kanten und Eckpunkte









Alexander Kubias – OpenCV - Open Source Computer Vision Library 30

Image Processing - Wechsel des Farbraums



t Wechsel von einem Farbraum in einen anderen:



void cvCvtColor( const CvArr* src,

CvArr* dst, int code );



t Beispiel: Wechsel von RGB in HSV



cvCvtColor(img, res, CV_BGR2HSV );



t Beispiel: Wechsel von RGB in Graustufen



cvCvtColor(img, res, CV_BGR2GRAY);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 31

Image Processing - Wechsel des Farbraums



t Auslesen des ersten Kanals eines Bildes



cvSetImageCOI(im, 1);

cvCopy(im, oneChannel, 0);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 32

Dynamische Datenstrukturen - Diskussion



t Vorteile:

­ sehr schnell

­ speichereffizient

t Nachteile:

­ nicht typsicher

­ umst¨ndlich bei der Benutzung

a

t Deshalb: Besser die STL verwenden









Alexander Kubias – OpenCV - Open Source Computer Vision Library 33

Dynamische Datenstrukturen - Storage



t Speicherverwaltung fur die dynamischen Datenstrukturen

¨

t Man muss einmal im Programm diesen Speicher anlegen:



CvMemStorage* storage = cvCreateMemStorage();



t Freigeben des Speichers:



CvReleaseMemStorage(&storage);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 34

Dynamische Datenstrukturen - Konturen



t Eine Kontur ist eine Liste von Punkten

t Anlegen einer Kontur:



CvSeq* contours = 0;

contours = cvCreateSeq(CV_SEQ_ELTYPE_POINT,

sizeof(CvSeq), sizeof(CvPoint), storage);



t Iteration durch die Konturen:



for(CvSeq* pCont = contours; pCont != 0;

pCont = pCont->h_next){

// hier kann man auf einzelne Kontur

// zugreifen !

}





Alexander Kubias – OpenCV - Open Source Computer Vision Library 35

Dynamische Datenstrukturen - Konturen



t Konturen eines Bin¨rbildes finden:

a



cvFindContours(binaryImage, storage,

&contours, sizeof(CvContour),

CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE,

cvPoint(0,0));



t Kontur in Bild einzeichnen:



cvDrawContours(binaryImage, contours,

CV_RGB(255,255,255),

CV_RGB(255,255,255), 0, 1, 8);









Alexander Kubias – OpenCV - Open Source Computer Vision Library 36

Dynamische Datenstrukturen - Konturen



t Punkte einer Kontur ausgeben:



CvSeqReader reader;

cvStartReadSeq(contours, &reader, 0);

CvPoint pt;

for(int i = 0; i total; i++){

memcpy(&pt, reader.ptr, contours->elem_size);

cout elem_size, reader);

}









Alexander Kubias – OpenCV - Open Source Computer Vision Library 37

References









Alexander Kubias – OpenCV - Open Source Computer Vision Library 38


Share This Document


Related docs
Other docs by qok10781
by registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!