opencv - open source computer vision · vision (cv): i grundlegende bildverarbeitung (filter, ......
Post on 26-Jul-2018
236 Views
Preview:
TRANSCRIPT
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 inOpenCV@yahoogroups.com, 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
top related