OpenCV - Open Source Computer Vision



Ähnliche Dokumente
OpenCV - Open Source Computer Vision

Bildverarbeitung mit OpenCV

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ OpenCV

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

1. Übung zu "Numerik partieller Differentialgleichungen"

Microsoft Visual C++ 6.0

Einführung in die C-Programmierung

Ralf Wondratschek adorsys GmbH & Co. KG. Bildbearbeitung für Android mit OpenCV

IPETRONIK TESTdrive SDK V02.00

Modellierung und Programmierung 1

Modul 122 VBA Scribt.docx

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Einführung in die Programmierung (EPR)

Übung zur Vorlesung Programmieren in C

Robotersteuerung. VL Mikrorechentechnik 2. SS 2013 Professur für Prozessleittechnik

Programmentwicklung mit C++ (unter Unix/Linux)

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Dr. Monika Meiler. Inhalt

Programmierbeispiele und Implementierung. Name: Michel Steuwer

Algorithmen zur Datenanalyse in C++

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

Programmier-Befehle - Woche 08

Eine Einführung in C-Funktionen

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

Zusammenfassung des Handzettels für Programmieren in C

Programmieren in Haskell Einführung

Kurze Einführung in die Programmiersprache C++ und in Root

2. Semester, 2. Prüfung, Lösung

Distributed Computing Group

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven

Zugriff auf die Modul-EEPROMs

Programmieren in C++ Arrays, Strings und Zeigerarithmetik

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Datentypen: Enum, Array, Struct, Union

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Klausur in Programmieren

Hochschule München, FK 03 FA SS Ingenieurinformatik

Einführung in die C++ Programmierung für Ingenieure

Deklarationen in C. Prof. Dr. Margarita Esponda

Graphic Coding. Klausur. 9. Februar Kurs A

Industrielle Bildverarbeitung mit OpenCV

Klausur in Programmieren

Objektbasierte Entwicklung

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals

Einführung in die Programmierung

Moderne C-Programmierung

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

DB2 Codepage Umstellung

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, , Ingo Josopait

Informatik für Mathematiker und Physiker Woche 7. David Sommer

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Die Programmiersprache C

Datenfelder (Arrays) Vektoren, Matrizen, Tabellen. Dr. Beatrice Amrhein

Funktionale Programmierung mit Haskell

Algorithms & Datastructures Midterm Test 1

S7ComRaspi. Schönberger Thomas 2016 Schönberger Thomas

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

OpenCV in a Nutshell. Fachhochschule Aachen. Fachbereich 9 Medizintechnik und Technomathematik. Seminararbeit im Studiengang Scientic Programming

2.0. Jens Weller Joel de Guzman Hartmut Kaiser

Symbio system requirements. Version 5.1

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Computerarithmetik ( )

In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch

Algorithmen & Datenstrukturen 1. Klausur

1 Vom Problem zum Programm

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

ITG RKSVNet - Webservice Signierung von Belegen via Internet

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Zählen von Objekten einer bestimmten Klasse

Programmentwicklung ohne BlueJ

Delegatesund Ereignisse

Übung zu Grundlagen der Betriebssysteme. 3. Übung

7. Organisation von Informationen

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Informatik I (D-MAVT)

Einführung in die Programmierung mit C++

Software und Visualisierungen. Erich Schubert, Dr. Arthur Zimek X-XX KDD Übung

Übersicht. Generierung von IPv6-Paketen mit Scapy. Scapy GUI - Kurzvorstellung. Szameitpreiks - Beuth Hochschule für Technik Berlin

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

OpenCL Implementierung von OpenCV Funktionen

Einführung in wxwidgets & wxdev-c++

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Kameraanbindung mit OpenCV. Projektpraktikum AR/VR Raphael Baumeister

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)


Objektorientierte Programmierung

Seminar Seminarname SS 2003

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Anleitung zur Einrichtung von OpenCV

KV Software Engineering Übungsaufgaben SS 2005

Praktikum Betriebssysteme 1. Aufgabe (1)

Transkript:

OpenCV - Open Source Computer Vision Niklas Beuter 30. April 2008 OpenCV - Open Source Computer Vision 1

Übersicht Vorteile von OpenCV Community 1 Vorteile von OpenCV Community 2 Aufbau Funktionalität 3 OpenCV einbinden Unterschiede Icewing - OpenCV 4 Ein einfaches Beispiel Arbeiten mit Bildern OpenCV - Open Source Computer Vision 2

OpenCV - Open Source Computer Vision 3 Vorteile von OpenCV Community OpenCV: Entwickelt von Intel seit 1999 Geschrieben in C/C++, optimiert für Echtzeit-Anwendungen Betriebssystem-, Hardware-, Window-Managerunabhängig Über 500 Funktionen für Foto/Video Bearbeitung, Laden und Speicherung Weit verbreitet in Unternehmen und Forschungseinrichtungen 2006 wurde die Version 1.0 herausgegeben

OpenCV - Open Source Computer Vision 4 Warum OpenCV? Vorteile von OpenCV Community Geschwindigkeit De facto Standard der Algorithmen Leichte Anbindung an IceWing

OpenCV - Open Source Computer Vision 4 Warum OpenCV? Vorteile von OpenCV Community Geschwindigkeit De facto Standard der Algorithmen Leichte Anbindung an IceWing

Community Vorteile von OpenCV Community Web group Eine online community in OpenCV@yahoogroups.com, wo Fehler, Meinungen und Fragen ausgetauscht werden. Eine große community existiert zusätzlich zwischen großen Unternehmen (IBM, Microsoft, Intel, Sony, Siemens, Google,...) und Forschungseinrichtungen (Stanford, MIT, CMU, Cambridge, INRIA,...) OpenCV - Open Source Computer Vision 5

OpenCV - Open Source Computer Vision 6 Module von OpenCV Aufbau Funktionalität

OpenCV - Open Source Computer Vision 7 Funktionalität in Worten Aufbau Funktionalität Vision (cv): Grundlegende Bildverarbeitung (Filter, geometrische Transformationen, Frabraumumwandlungen) Bildanalyse (Featureauswahl, Morphologische Operationen, Konturverfolgung, Histogramme) Strukturelle Analyse (Formfaktoren, Planare Unterteilungen) Bewegungsanalyse und Objektverfolgung Objekt/Gesichtserkennung Kamerakalibrierung und Teile von 3D Rekonstruktion

OpenCV - Open Source Computer Vision 8 Funktionalität in Worten Aufbau Funktionalität Kernfunktionalität (cxcore, partly used by Intel Open Source Probabilistic Network Library as well): Einfache Operationen auf Arrays Matrixoperationen, Mathefunktionen DFT XML Zeichenfunktionen (2D Graphik) Komplexe : Sparsematrizen, Wachsende Sequenzen, Graphen

OpenCV - Open Source Computer Vision 9 Funktionalität in Worten Aufbau Funktionalität IO/GUI (highgui) Bild/Video Aufnahme. Einfache Oberflächenerstellung (Alle OpenCV-Beispiele mit GUI benutzen HighGUI)

OpenCV - Open Source Computer Vision 10 Funktionalität in Worten Aufbau Funktionalität Experimentelle Funtionen (cvaux): 3D Vision: Stereo Kalibrierung,... Stereo Korrespondierung, Graphenverbindungen Gesichtsdetailerkennung und -tracking Shape matching, skeletons... HMMs Texturen

OpenCV - Open Source Computer Vision 11 Funktionalität in Bildern Aufbau Funktionalität

OpenCV - Open Source Computer Vision 13 OpenCV einbinden Unterschiede Icewing - OpenCV Das erste Plugin in Icewing mit OpenCV IceWing Plugin generieren /vol/vita/bin/icewing-plugingen -cpp OpenCVTestPlugin OCVTest OpenCV im Makefile OPENCV_DIR = /vol/vision/ INCLUDES = -I$(OPENCV_DIR)/include/opencv OPENCV_LIB = -L$(OPENCV_DIR)/lib/ -Wl,--rpath,$(OPENCV_DIR)/lib LIBS = $(OPENCV_LIB) -lm -lcvaux -lc -lhighgui LDLIBS += $(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 15 OpenCV einbinden Unterschiede Icewing - OpenCV Das erste Plugin in Icewing mit OpenCV Kompilieren as usual make clean; make depend; make; IceWing Aufruf icewing -sg f -l./libopencvtestplugin.so opencv.h void 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 17 IceWing OpenCV plugin OpenCV einbinden Unterschiede Icewing - OpenCV OpenCV plugin #include "tools/opencv.h" // icewing opencv support #include <cv.h> // opencv header bool 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; } OpenCV Unterstuetzung bereits enthalten in IceWing iw opencv from img() Funktion zur Konvertierung zwischen den Bildformaten cvcreateimage() Standard Kontruktor fuer IplImages cvsize und andere Funktionen machen den Code kuerzer und erlauben 1-line Funktionsaufrufe CV IMAGE ELEM() Einfacher Weg zum Zugriff auf Image Pixel cvcvtcolor() Beispiel fuer eine OpenCV Bildbearbeitungsfunktion iw opencv render() Bildanzeige von IplImage in IceWing cvreleaseimage() Immer schoen aufraeumen

OpenCV - Open Source Computer Vision 18 OpenCV einbinden Unterschiede Icewing - OpenCV IceWing Bildformat vs. OpenCV Bildformat Standard-Bildverwendung unterscheidet sich zwischen IceWing und OpenCV OpenCV (IplImage) Pixel im gleichen Speicherbereich. Farben hintereinander IceWing (iwimage) Plane orientierte Speicherverwaltung Jede plane hat die Größe des Bildes Konvertierungsroutinen zum Umwandeln

OpenCV - Open Source Computer Vision 20 Ein einfaches Beispiel Arbeiten mit Bildern OpenCV Image IplImage -- 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 22 Ein einfaches Beispiel Arbeiten mit Bildern OpenCV Matrix CvMat // 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 24 Ein einfaches Beispiel Arbeiten mit Bildern OpenCV Vektor CvMatND // 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 26 Das einfachste Programm Ein einfaches Beispiel Arbeiten mit Bildern 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; }

Das einfachste Programm Ein einfaches Beispiel Arbeiten mit Bildern #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

OpenCV - Open Source Computer Vision 30 Zugriff auf den Bildinhalt Ein einfaches Beispiel Arbeiten mit Bildern k = channel; i = row; j = column; Indirekt - Ineffizient IplImage* img=cvcreateimage(cvsize(640,480),ipl_depth_32f,3); CvScalar s; s=cvget2d(img,i,j); // get the (i,j) pixel value printf("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 Fehleranfaellig IplImage* 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 32 Zugriff auf den Bildinhalt Ein einfaches Beispiel Arbeiten mit Bildern k = channel; i = row; j = column; Pointer - Effizient, aber eventuell risikohaft IplImage* 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 - Galant template<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));} }; Wrapper - Galant IplImage* 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; typedef struct{ unsigned char b,g,r; } RgbPixel; typedef struct{ float b,g,r; } RgbPixelFloat; typedef Image<RgbPixel> typedef Image<RgbPixelFloat> typedef Image<unsigned char> typedef Image<float> RgbImage; RgbImageFloat; BwImage; BwImageFloat;

OpenCV - Open Source Computer Vision 33 Zeichnen mit OpenCV Ein einfaches Beispiel Arbeiten mit Bildern Zeichenfunktionen Linien, Kreise, Ellipse,... Polygone (Gefüllt, Kontur) Text Verschiedene Farben, Linienstärken, Antialising Beliebige Bildtypen werden dabei unterstützt

OpenCV - Open Source Computer Vision 34 Nützliche Quellen Ein einfaches Beispiel Arbeiten mit Bildern /vol/vision/ocv100/share/opencv/doc/index.htm, faq.htm (supplied documentation) http://opencvlibrary.sourceforge.net (OpenCV Wiki-pages) http://www.intel.com/research/mrl/research/opencv/ (OpenCV at Intel) http://sourceforge.net/projects/opencvlibrary/ (the project page at SF. Take the latest release or CVS snapshots here) http://www.opencv.org/ (OpenCV Wiki pages, still being formed) http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/ index.html (nice newbie introduction)