25
Universit ¨ at Bielefeld Angewandte Informatik Was ist OpenCV? Aufbau von OpenCV OpenCV und IceWing Funktionen von OpenCV OpenCV - Open Source Computer Vision Niklas Beuter 30. April 2008 OpenCV - Open Source Computer Vision 1

OpenCV - Open Source Computer Vision · Vision (cv): I Grundlegende Bildverarbeitung (Filter, ... data[i*step+j*channels+k] = 111; Wrapper - Galant IplImage* img=cvCreateImage(cvSize(640,480),

Embed Size (px)

Citation preview

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

OpenCV-

Open Source Computer Vision

Niklas Beuter

30. April 2008

OpenCV - Open Source Computer Vision 1

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

Vorteile von OpenCVCommunity

Ubersicht

1 Was ist OpenCV?Vorteile von OpenCVCommunity

2 Aufbau von OpenCVAufbauFunktionalitat

3 OpenCV und IceWingOpenCV einbindenUnterschiede Icewing - OpenCV

4 Funktionen von OpenCVDatenstrukturenEin einfaches BeispielArbeiten mit Bildern

OpenCV - Open Source Computer Vision 2

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

Vorteile von OpenCVCommunity

Was ist OpenCV?

OpenCV:I Entwickelt von Intel seit 1999I Geschrieben in C/C++, optimiert fur

Echtzeit-AnwendungenI Betriebssystem-, Hardware-, Window-ManagerunabhangigI Uber 500 Funktionen fur Foto/Video Bearbeitung, Laden

und SpeicherungI Weit verbreitet in Unternehmen und

ForschungseinrichtungenI 2006 wurde die Version 1.0 herausgegeben

OpenCV - Open Source Computer Vision 3

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

Vorteile von OpenCVCommunity

Warum OpenCV?

I GeschwindigkeitI De facto Standard der AlgorithmenI Leichte Anbindung an IceWing

OpenCV - Open Source Computer Vision 4

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

Vorteile von OpenCVCommunity

Warum OpenCV?

I GeschwindigkeitI De facto Standard der AlgorithmenI Leichte Anbindung an IceWing

OpenCV - Open Source Computer Vision 4

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

Vorteile von OpenCVCommunity

Community

I Web group – Eine online community [email protected], wo Fehler, Meinungen undFragen ausgetauscht werden.

I Eine große community existiert zusatzlich zwischengroßen Unternehmen (IBM, Microsoft, Intel, Sony,Siemens, Google, ...) und Forschungseinrichtungen(Stanford, MIT, CMU, Cambridge, INRIA, ...)

OpenCV - Open Source Computer Vision 5

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

AufbauFunktionalitat

Module von OpenCV

OpenCV - Open Source Computer Vision 6

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

AufbauFunktionalitat

Funktionalitat in Worten

Vision (cv):I Grundlegende Bildverarbeitung (Filter, geometrische

Transformationen, Frabraumumwandlungen)I Bildanalyse (Featureauswahl, Morphologische

Operationen, Konturverfolgung, Histogramme)I Strukturelle Analyse (Formfaktoren, Planare

Unterteilungen)I Bewegungsanalyse und ObjektverfolgungI Objekt/GesichtserkennungI Kamerakalibrierung und Teile von 3D Rekonstruktion

OpenCV - Open Source Computer Vision 7

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

AufbauFunktionalitat

Funktionalitat in Worten

Kernfunktionalitat (cxcore, partly used by Intel OpenSource Probabilistic Network Library as well):

I Einfache Operationen auf ArraysI Matrixoperationen, MathefunktionenI DFTI XMLI Zeichenfunktionen (2D Graphik)I Komplexe Datenstrukturen: Sparsematrizen, Wachsende

Sequenzen, Graphen

OpenCV - Open Source Computer Vision 8

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

AufbauFunktionalitat

Funktionalitat in Worten

IO/GUI (highgui)I Bild/Video Aufnahme.I Einfache Oberflachenerstellung (Alle OpenCV-Beispiele

mit GUI benutzen HighGUI)

OpenCV - Open Source Computer Vision 9

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

AufbauFunktionalitat

Funktionalitat in Worten

Experimentelle Funtionen (cvaux):I 3D Vision: Stereo Kalibrierung, ...I Stereo Korrespondierung, GraphenverbindungenI Gesichtsdetailerkennung und -trackingI Shape matching, skeletons ...I HMMsI Texturen

OpenCV - Open Source Computer Vision 10

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

AufbauFunktionalitat

Funktionalitat in Bildern

OpenCV - Open Source Computer Vision 11

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

OpenCV einbindenUnterschiede Icewing - OpenCV

Das erste Plugin in Icewing mit OpenCV

IceWing Plugin generieren/vol/vita/bin/icewing-plugingen -cpp OpenCVTestPlugin OCVTest

OpenCV im MakefileOPENCV_DIR = /vol/vision/INCLUDES = -I$(OPENCV_DIR)/include/opencvOPENCV_LIB = -L$(OPENCV_DIR)/lib/ -Wl,--rpath,$(OPENCV_DIR)/libLIBS = $(OPENCV_LIB) -lm -lcvaux -lc -lhighguiLDLIBS += ‘$(ICEWING) --libs‘ $(LIBS)CXXFLAGS += $(INCLUDES)

Include Libs im Plugin#include "tools/opencv.h" // IceWing OpenCV support#include <cv.h>#include <cvaux.h>#include <highgui.h>#include <cxcore.h> // unnecessary - included in cv.h

OpenCV - Open Source Computer Vision 13

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

OpenCV einbindenUnterschiede Icewing - OpenCV

Das erste Plugin in Icewing mit OpenCV

Kompilieren as usualmake clean; make depend; make;

IceWing Aufruficewing -sg f -l ./libopencvtestplugin.so

opencv.hvoid iw_opencv_render (prevBuffer *b, const IplImage *img, iwColtab ctab);IplImage* iw_opencv_from_img (const iwImage *img, BOOL swapRB);iwImage* iw_opencv_to_img (const IplImage *img, BOOL swapRB);iwImage* iw_opencv_to_img_interleaved (const IplImage *img, BOOL swapRB);

OpenCV - Open Source Computer Vision 15

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

OpenCV einbindenUnterschiede Icewing - OpenCV

IceWing OpenCV plugin

OpenCV plugin#include "tools/opencv.h" // icewing opencv support#include <cv.h> // opencv headerbool OpenCVTestPlugin::Process (char *ident, plugData*data){IplImage* BGRimg = 0;iwImage *img = &((grabImageData*)data->data)->img;int w = img->width, h = img->height;BGRimg = iw_opencv_from_img(img, true);GRAYimg = cvCreateImage(cvSize(w,h), IPL_DEPTH_8U,1);int i = 120, j= 80;uchar* ptr = &CV_IMAGE_ELEM(iBGRimg,uchar,i,j*3);cvCvtColor(BGRimg, GRAYimg, CV_BGR2GRAY);iw_opencv_render(b_image, GRAYimg, IW_GRAY);prev_draw_buffer(b_image);if (BGRimg) cvReleaseImage(&BGRimg);return TRUE;}

I OpenCV Unterstuetzung bereitsenthalten in IceWing

I iw opencv from img() Funktion zurKonvertierung zwischen denBildformaten

I cvCreateImage() Standard Kontruktorfuer IplImages

I cvSize und andere Funktionenmachen den Code kuerzer underlauben 1-line Funktionsaufrufe

I CV IMAGE ELEM() Einfacher Wegzum Zugriff auf Image Pixel

I cvCvtColor() Beispiel fuer eineOpenCV Bildbearbeitungsfunktion

I iw opencv render() Bildanzeige vonIplImage in IceWing

I cvReleaseImage() Immer schoenaufraeumen

OpenCV - Open Source Computer Vision 17

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

OpenCV einbindenUnterschiede Icewing - OpenCV

IceWing Bildformat vs. OpenCV Bildformat

I Standard-Bildverwendung unterscheidet sich zwischenIceWing und OpenCV

I OpenCV (IplImage)

I Pixel im gleichen Speicherbereich.Farben hintereinander

I IceWing (iwImage)

I Plane orientierteSpeicherverwaltung

I Jede plane hat die Große desBildes

I Konvertierungsroutinen zum Umwandeln

OpenCV - Open Source Computer Vision 18

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Datenstrukturen

OpenCV ImageIplImage

|-- int nChannels; // Number of color channels (1,2,3,4)|-- int depth; // Pixel depth in bits:| // IPL_DEPTH_8U, IPL_DEPTH_8S,| // IPL_DEPTH_16U,IPL_DEPTH_16S,| // IPL_DEPTH_32S,IPL_DEPTH_32F,| // IPL_DEPTH_64F|-- int width; // image width in pixels|-- int height; // image height in pixels|-- char* imageData; // pointer to aligned image data| // Note that color images are stored in BGR order|-- int dataOrder; // 0 - interleaved color channels,| // 1 - separate color channels| // cvCreateImage can only create interleaved images|-- int origin; // 0 - top-left origin,| // 1 - bottom-left origin (Windows bitmaps style)|-- int widthStep; // size of aligned image row in bytes|-- int imageSize; // image data size in bytes = height*widthStep

OpenCV - Open Source Computer Vision 20

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Datenstrukturen

OpenCV MatrixCvMat // 2D array

|-- int type; // elements type (uchar,short,int,float,double) and flags|-- int step; // full row length in bytes|-- int rows, cols; // dimensions|-- int height, width; // alternative dimensions reference|-- union data;

|-- uchar* ptr; // data pointer for an unsigned char matrix|-- short* s; // data pointer for a short matrix|-- int* i; // data pointer for an integer matrix|-- float* fl; // data pointer for a float matrix|-- double* db; // data pointer for a double matrix

OpenCV - Open Source Computer Vision 22

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Datenstrukturen

OpenCV VektorCvMatND // N-dimensional array

|-- int type; // elements type (uchar,short,int,float,double) and flags|-- int dims; // number of array dimensions|-- union data;| |-- uchar* ptr; // data pointer for an unsigned char matrix| |-- short* s; // data pointer for a short matrix| |-- int* i; // data pointer for an integer matrix| |-- float* fl; // data pointer for a float matrix| |-- double* db; // data pointer for a double matrix||-- struct dim[]; // information for each dimension

|-- size; // number of elements in a given dimension|-- step; // distance between elements in a given dimension

OpenCV - Open Source Computer Vision 24

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Das einfachste Programm

sample.cpp#include <cv.h>#include <highgui.h>int main( int argc, char** argv ){

IplImage* image;if( argc != 2 ) return -1;image = cvLoadImage( argv[1] );if( !image ) return -1;cvNamedWindow( "Sample", 1 );cvShowImage( "Sample", image );cvWaitKey();return 0;

}

OpenCV - Open Source Computer Vision 26

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Das einfachste Programm

#include <cv.h>

#include <highgui.h>

IplImage* image = 0;

int thresh = 100;

void on_trackbar(int)

{

IplImage* gray = cvCreateImage( cvGetSize(image), 8, 1 );

CvMemStorage* storage = cvCreateMemStorage(0);

CvSeq* contours = 0;

cvCvtColor( image, gray, CV_BGR2GRAY );

cvThreshold( gray, gray, thresh, 255, CV_THRESH_BINARY );

cvFindContours( gray, storage, &contours );

cvZero( gray );

if( contours )

cvDrawContours( gray, contours, cvScalarAll(255),

cvScalarAll(255), 100 );

cvShowImage( "Contours", gray );

cvReleaseImage( &gray );

cvReleaseMemStorage( &storage );

}

int main( int argc, char** argv )

{

IplImage* image;

if( argc != 2 || !(image = cvLoadImage(argv[1])) )

return -1;

cvNamedWindow( "Contours", 1 );

cvCreateTrackbar( "Threshold", "Contours",

&thresh, 255, on_trackbar );

on_trackbar(0);

cvWaitKey();

return 0;

}

OpenCV - Open Source Computer Vision 28

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Zugriff auf den Bildinhalt

k = channel; i = row; j = column;

Indirekt - IneffizientIplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);CvScalar s;s=cvGet2D(img,i,j); // get the (i,j) pixel valueprintf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]);s.val[0]=111;s.val[1]=111;s.val[2]=111;cvSet2D(img,i,j,s); // set the (i,j) pixel value

Direkt - Effizient, aber FehleranfaelligIplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);((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

OpenCV - Open Source Computer Vision 30

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Zugriff auf den Bildinhalt

k = channel; i = row; j = column;

Pointer - Effizient, abereventuell risikohaftIplImage* img = cvCreateImage(cvSize(640,480),

IPL_DEPTH_8U,3);

int height = img->height;

int width = img->width;

int step = img->widthStep/sizeof(uchar);

int channels = img->nChannels;

uchar* data = (uchar *)img->imageData;

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

Wrapper - GalantIplImage* img=cvCreateImage(cvSize(640,480),

IPL_DEPTH_8U,3);

RgbImage imgA(img);

imgA[i][j].b = 111;

imgA[i][j].g = 111;

imgA[i][j].r = 111;

Wrapper - Galanttemplate<class T> class Image

{

private:

IplImage* imgp;

public:

Image(IplImage* img=0) {imgp=img;}

~Image(){imgp=0;}

void operator=(IplImage* img) {imgp=img;}

inline T* operator[](const int rowIndx) {

return ((T *)(imgp->imageData +

rowIndx*imgp->widthStep));}

};

typedef struct{

unsigned char b,g,r;

} RgbPixel;

typedef struct{

float b,g,r;

} RgbPixelFloat;

typedef Image<RgbPixel> RgbImage;

typedef Image<RgbPixelFloat> RgbImageFloat;

typedef Image<unsigned char> BwImage;

typedef Image<float> BwImageFloat;

OpenCV - Open Source Computer Vision 32

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Zeichnen mit OpenCV

ZeichenfunktionenI Linien, Kreise, Ellipse, ...I Polygone (Gefullt, Kontur)I TextI Verschiedene Farben,

Linienstarken, AntialisingI Beliebige Bildtypen werden

dabei unterstutzt

OpenCV - Open Source Computer Vision 33

Universitat Bielefeld

AngewandteInformatik

Was ist OpenCV?Aufbau von OpenCV

OpenCV und IceWingFunktionen von OpenCV

DatenstrukturenEin einfaches BeispielArbeiten mit Bildern

Nutzliche Quellen

I /vol/vision/ocv100/share/opencv/doc/index.htm, faq.htm(supplied documentation)

I http://opencvlibrary.sourceforge.net (OpenCV Wiki-pages)I http://www.intel.com/research/mrl/research/opencv/ (OpenCV

at Intel)I http://sourceforge.net/projects/opencvlibrary/ (the project

page at SF. Take the latest release or CVS snapshots here)I http://www.opencv.org/ (OpenCV Wiki pages, still being formed)I http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/

index.html (nice newbie introduction)

OpenCV - Open Source Computer Vision 34