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 Visionaiweb.techfak.uni-bielefeld.de/files/OpenCVTutorial.pdf · OPENCV_LIB = -L$(OPENCV_DIR)/lib/ -Wl,--rpath,$(OPENCV_DIR)/lib LIBS = $(OPENCV_LIB)

  • Upload
    others

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

  • 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

    [email protected]

  • 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