Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
OpenCV-
Open Source Computer Vision
Niklas Beuter und Christian Lang
6. Mai 2009
OpenCV - Open Source Computer Vision 1
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
Vorteile von OpenCV
Ubersicht
1 Was ist OpenCV?Vorteile von OpenCV
2 Aufbau von OpenCVAufbauModulubersichtBeispiel
3 OpenCV und IceWingOpenCV einbindenBeispielUnterschiede Icewing — OpenCV
4 Arbeiten mit OpenCVDatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
OpenCV - Open Source Computer Vision 2
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
Vorteile von OpenCV
Was ist OpenCV?
OpenCV:I entwickelt von Intel seit 1999I geschrieben in C/C++, optimiert fur EchtzeitanwendungenI unabhangig von Betriebssystem, Hardware und
WindowmanagerI Optimierung durch Verwendung von Intel IPP moglichI mehr als 500 Funktionen fur Foto- und Videoverarbeitung,
Laden und SpeichernI Weit verbreitet in Forschungseinrichtungen und
UnternehmenI Aktuelle offiziele Version: 1.0 (2006)I neueste (Entwickler-) Version uber Sourceforge verfugbar
OpenCV - Open Source Computer Vision 3
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
Vorteile von OpenCV
Warum OpenCV?
I Geschwindigkeit / EchtzeitfahigkeitI sehr schnelle ImplementierungenI dafur teilweise schwer verstandlicher Source CodeI fur Verwendung aber i.d.R. Anschauen des Source Codes
nicht notigI große Anzahl von Standardalgorithmen verfugbarI frei verfugbar (Open Source)I Leichte Anbindung an IceWing moglich
OpenCV - Open Source Computer Vision 4
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Module von OpenCV
OpenCV - Open Source Computer Vision 5
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Modulubersicht
Vision (“cv”):I Grundlegende Bildverarbeitung (Filter, geometrische
Transformationen, Farbraumumwandlungen)I Bildanalyse (Featureauswahl, Morphologische
Operationen, Konturverfolgung, Histogramme)I Strukturelle Analyse (Formfaktoren, Planare
Unterteilungen / Segmentierung)I Bewegungsanalyse und ObjektverfolgungI Objekt-/GesichtserkennungI Kamerakalibrierung und Teile von 3D Rekonstruktion
OpenCV - Open Source Computer Vision 6
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Modulubersicht
Kernfunktionalitat (“cxcore”):I Einfache Operationen auf ArraysI Matrixoperationen, mathematische FunktionenI DFTI XMLI Zeichenfunktionen (2D–Graphik)I Komplexe Datenstrukturen: sparliche Matrizen,
Wachsende Sequenzen, GraphenI “cxcore” teilweise auch von der “Intel Open Source
Probabilistic Network Library” benutzt
OpenCV - Open Source Computer Vision 7
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Modulubersicht
IO/GUI (“highgui”)I Aufnahme und Wiedergabe von Bildern und VideosI Einfache (!) GUI mit NutzerinteraktionenI alle OpenCV–Beispiele mit GUI benutzen HighGUI
OpenCV - Open Source Computer Vision 8
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Modulubersicht
Experimentelle Funktionen (“cvaux”):I 3D Vision: Stereo Kalibrierung, ...I Stereo Korrespondierung, GraphenverbindungenI Gesichtsdetailerkennung und -trackingI Shape matching, skeletons ...I HMMsI Texturen
OpenCV - Open Source Computer Vision 9
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Beispiele
OpenCV - Open Source Computer Vision 10
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Ein einfaches Programmbeispiel
sample1.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();cvReleaseImage(&image);cvDestroyWindow("Sample");return 0;
}
OpenCV - Open Source Computer Vision 11
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
AufbauModulubersichtBeispiel
Ein einfaches Programmbeispiel
sample2.cpp#include <cv.h>
#include <highgui.h>
IplImage* image = 0;
void cb_slider (int thresh) {
IplImage* gray = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);
cvCvtColor(image,gray,CV_BGR2GRAY);
cvThreshold(gray,gray,thresh,255,CV_THRESH_BINARY);
CvSeq* contours = 0;
CvMemStorage* storage = cvCreateMemStorage(0);
cvFindContours(gray,storage,&contours);
cvSetZero(gray);
if (contours)
cvDrawContours(gray,contours,cvScalarAll(255),
cvScalarAll(255),100);
cvShowImage("Contours",gray);
cvReleaseImage(&gray);
cvReleaseMemStorage(&storage);
}
int main( int argc, char** argv ) {
if (argc != 2 || !(image = cvLoadImage(argv[1]))) return -1;
cvNamedWindow("Contours",1);
int thresh = 100;
cvCreateTrackbar("Threshold","Contours",&thresh,255,cb_slider);
cb_slider(thresh);
cvWaitKey();
return 0;
}
OpenCV - Open Source Computer Vision 12
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
OpenCV einbindenBeispielUnterschiede Icewing — OpenCV
OpenCV mit iceWing verwenden
IceWing Plugin generierenexport PATH=/vol/ai/releases/hardy/bin:$PATHexport PKG_CONFIG_PATH=/vol/ai/releases/hardy/lib/pkgconfig:$PKG_CONFIG_PATHicewing-plugingen -cpp OpenCVTestPlugin
OpenCV im MakefileOPENCV_CFLAGS = ‘pkg-config opencv --cflags‘OPENCV_LDFLAGS = ‘pkg-config opencv --libs-only-L‘OPENCV_LIBS = ‘pkg-config opencv --libs-only-l‘OPENCV_LIBDIR = ‘pkg-config opencv --variable=libdir‘CXXFLAGS += $(OPENCV_CFLAGS)LDFLAGS += $(OPENCV_LDFLAGS) -Wl,--rpath,$(OPENCV_LIBDIR) $(OPENCV_LIBS)
Include header files 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 IceWingArbeiten mit OpenCV
OpenCV einbindenBeispielUnterschiede Icewing — OpenCV
OpenCV mit iceWing verwenden
Kompilieren und Linken wie ublichmake clean; [make depend;] make;
IceWing Aufruficewing -sg V -l ./libopencvtestplugin.so
“opencv.h“ iceWing headervoid 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 14
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
OpenCV einbindenBeispielUnterschiede Icewing — OpenCV
Ein einfaches Beispiel–Plugin
OpenCV pluginbool OpenCVTestPlugin::Process (char *ident, plugData *data) {
IplImage* image = 0;iwImage* img = &((grabImageData*)data->data)->img;image = iw_opencv_from_img(img,true);IplImage* gray = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);CvMemStorage* storage = cvCreateMemStorage(0);cvCvtColor(image,gray,CV_BGR2GRAY);cvThreshold(gray,gray,value,255,CV_THRESH_BINARY);CvSeq* contours = 0;cvFindContours(gray,storage,&contours);cvSetZero(gray);if (contours)
cvDrawContours(gray,contours,cvScalarAll(255),cvScalarAll(255),100);iw_opencv_render(b_image,gray,IW_GRAY);prev_draw_buffer(b_image);if (image) cvReleaseImage(&image);if (gray) cvReleaseImage(&gray);cvReleaseMemStorage(&storage);return TRUE;
}
OpenCV - Open Source Computer Vision 15
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
OpenCV einbindenBeispielUnterschiede 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 16
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
DatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
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 17
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
DatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
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 18
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
DatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
Datenstrukturen
OpenCV N–dimensionale MatrixCvMatND // 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 19
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
DatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
Zugriff auf den Bildinhalt
k = channel; i = row; j = column;
Indirekt — ineffizient, aber sicherIplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);CvScalar 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] = 112;s.val[2] = 113;cvSet2D(img,i,j,s); // set the (i,j) pixel value
Direkt — effizient, aber fehleranfalligIplImage* 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 20
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
DatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
Zugriff auf den Bildinhalt
k = channel; i = row; j = column;
Pointer — effizient, aberimmer noch fehleranfalligIplImage* 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;
Verwendung derWrapper–KlasseIplImage* img = cvCreateImage(cvSize(640,480),
IPL_DEPTH_8U,3);
RgbImage imgA(img);
imgA[i][j].b = 111;
imgA[i][j].g = 112;
imgA[i][j].r = 113;
Wrapper–Klasse — eleganttemplate<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 21
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
DatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
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 22
Universitat Bielefeld
AngewandteInformatik
Was ist OpenCV?Aufbau von OpenCV
OpenCV und IceWingArbeiten mit OpenCV
DatenstrukturenArbeiten mit BildernLiteratur und Dokumentation
Nutzliche Quellen
I Buch Learning OpenCV von Bradski und Kaehler, O’Reilly–Verlag, 2008I /vol/ai/releases/hardy/share/opencv/doc/index.htm
(Dokumentation zur OpenCV–Installation im GZI)I http://www.opencv.org oder direkt
http://sourceforge.net/projects/opencvlibrary(OpenCV–Projektseite mit SVN, Download von Snapshots)
I Pakete der Version 1.0 fur viele Linux–Distributionen (ubuntu,OpenSUSE, ...)
I http://opencv.willowgarage.com/wiki (offizielles OpenCV Wiki)I http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/
index.html (Gute Einfuhrung in OpenCV, viele Beispiele auf diesenFolien sind daraus entnommen)
OpenCV - Open Source Computer Vision 23
Top Related