opencv - open source computer visionaiweb.techfak.uni-bielefeld.de/files/opencvtutorial.pdf ·...
TRANSCRIPT
-
Universität 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
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
Vorteile von OpenCVCommunity
Übersicht
1 Was ist OpenCV?Vorteile von OpenCVCommunity
2 Aufbau von OpenCVAufbauFunktionalität
3 OpenCV und IceWingOpenCV einbindenUnterschiede Icewing - OpenCV
4 Funktionen von OpenCVDatenstrukturenEin einfaches BeispielArbeiten mit Bildern
OpenCV - Open Source Computer Vision 2
-
Universität 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 für
Echtzeit-AnwendungenI Betriebssystem-, Hardware-, Window-ManagerunabhängigI Über 500 Funktionen für 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
-
Universität 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
-
Universität 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
-
Universität 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 zusätzlich zwischengroßen Unternehmen (IBM, Microsoft, Intel, Sony,Siemens, Google, ...) und Forschungseinrichtungen(Stanford, MIT, CMU, Cambridge, INRIA, ...)
OpenCV - Open Source Computer Vision 5
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
AufbauFunktionalität
Module von OpenCV
OpenCV - Open Source Computer Vision 6
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
AufbauFunktionalität
Funktionalität 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
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
AufbauFunktionalität
Funktionalität in Worten
Kernfunktionalität (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
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
AufbauFunktionalität
Funktionalität in Worten
IO/GUI (highgui)I Bild/Video Aufnahme.I Einfache Oberflächenerstellung (Alle OpenCV-Beispiele
mit GUI benutzen HighGUI)
OpenCV - Open Source Computer Vision 9
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
AufbauFunktionalität
Funktionalität 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
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
AufbauFunktionalität
Funktionalität in Bildern
OpenCV - Open Source Computer Vision 11
-
Universität 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 #include #include #include // unnecessary - included in cv.h
OpenCV - Open Source Computer Vision 13
-
Universität 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
-
Universität 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 // 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
-
Universität 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 Größe desBildes
I Konvertierungsroutinen zum Umwandeln
OpenCV - Open Source Computer Vision 18
-
Universität 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
-
Universität 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
-
Universität 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
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
DatenstrukturenEin einfaches BeispielArbeiten mit Bildern
Das einfachste Programm
sample.cpp#include #include 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
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
DatenstrukturenEin einfaches BeispielArbeiten mit Bildern
Das einfachste Programm
#include
#include
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
-
Universität 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
-
Universität 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 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 RgbImage;
typedef Image RgbImageFloat;
typedef Image BwImage;
typedef Image BwImageFloat;
OpenCV - Open Source Computer Vision 32
-
Universität 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 (Gefüllt, Kontur)I TextI Verschiedene Farben,
Linienstärken, AntialisingI Beliebige Bildtypen werden
dabei unterstützt
OpenCV - Open Source Computer Vision 33
-
Universität Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingFunktionen von OpenCV
DatenstrukturenEin einfaches BeispielArbeiten mit Bildern
Nützliche 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
/vol/vision/ocv100/share/opencv/doc/index.htmhttp://opencvlibrary.sourceforge.nethttp://www.intel.com/research/mrl/research/opencv/http://sourceforge.net/projects/opencvlibrary/http://www.opencv.org/http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/index.htmlhttp://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/index.html
Was ist OpenCV?Vorteile von OpenCVCommunity
Aufbau von OpenCVAufbauFunktionalität
OpenCV und IceWingOpenCV einbindenUnterschiede Icewing - OpenCV
Funktionen von OpenCVDatenstrukturenEin einfaches BeispielArbeiten mit Bildern