Sie sind auf Seite 1von 26
Lehrstuhl für Datenverarbeitung T e c h n i s c h e U n

Lehrstuhl für Datenverarbeitung

Technische Universität München

T e c h n i s c h e U n i v e r

Leistungskurs C++

OpenCV

Lehrstuhl für Datenverarbeitung Was ist OpenCV? T e c h n i s c h

Lehrstuhl für Datenverarbeitung

Was ist OpenCV?

Technische Universität München

U n i v e r s i t ä t M ü n c h

OpenCV (Free Open Source Computer Vision) ist eine Library mit Funktionen für Computer Vision in Echtzeit

Ursprünglich von Intel entwickelt, inzwischen hauptsächlich von Willow Garage getragen

BSD-Lizenz: Kostenlos verwendbar für kommerzielle und

nichtkommerzielle Projekte, egal ob Open oder Closed Source,

keine Verpflichtung zur Veröffentlichung von Änderungen

C++ Interface seit Version 2.0 (ab 2009 ältere Beispielprogramme

meiden!)

Lehrstuhl für Datenverarbeitung Was ist OpenCV? T e c h n i s c h

Lehrstuhl für Datenverarbeitung

Was ist OpenCV?

Technische Universität München

U n i v e r s i t ä t M ü n c h

Download von: http://sourceforge.net/projects/opencvlibrary/

Dokumentation:

Version 2.2: http://opencv.willowgarage.com/documentation/cpp/index.html

Version 2.3 (noch) unter: http://opencv.itseez.com/

Beispiele, Tutorials, Einführung:

http://opencv.willowgarage.com/wiki/

Lehrstuhl für Datenverarbeitung Was ist OpenCV? • Entwicklung seit 1999 (1.0 seit 2006) • Über

Lehrstuhl für Datenverarbeitung

Was ist OpenCV?

Entwicklung seit 1999 (1.0 seit 2006)

Über 500 Funktionen

Unterstützte Plattformen:

Linux

Windows

MacOS

Android & iOS

Über 2.000.000 Downloads

Technische Universität München

Downloads T e c h n i s c h e U n i v e
Lehrstuhl für Datenverarbeitung T e c h n i s c h e U n

Lehrstuhl für Datenverarbeitung

Technische Universität München

T e c h n i s c h e U n i v e r
T e c h n i s c h e U n i v e r
Lehrstuhl für Datenverarbeitung T e c h n i s c h e U n

Lehrstuhl für Datenverarbeitung

Technische Universität München

U n i v e r s i t ä t M ü n c h

Wo wird OpenCV eingesetzt?

Google (angeblich): Google Maps, Google Street View, Google Earth, Picasa, YouTube

Forschung in Industrie und an Universitäten

Stanley der Stanford University

Überwachung

Sicherheitssysteme

uvm.

• Stanley der Stanford University • Überwachung • Sicherheitssysteme • uvm. Leistungskurs C++ 6
Lehrstuhl für Datenverarbeitung Komponenten von OpenCV • Core: T e c h n i s

Lehrstuhl für Datenverarbeitung

Komponenten von OpenCV

Core:

Technische Universität München

U n i v e r s i t ä t M ü n c h

Grundlegende Datentypen (Punkte, Rechtecke, Skalare, Vektoren, Matrizen, dünnbesetzte Matrizen)

Operatoren auf den Datentypen

– Dynamische Strukturen (Bäume, Graphen…)

Zeichenfunktionen

XML

Clustering (kmeans…)

Hilfs- und Systemfunktionen

Lehrstuhl für Datenverarbeitung OpenCV Core T e c h n i s c h e

Lehrstuhl für Datenverarbeitung

OpenCV Core

Technische Universität München

U n i v e r s i t ä t M ü n c h

#include <opencv/cv.h>

using namespace cv;

int main(int argc, char *argv[])

{

 

// Erzeuge eine Matrix Mat image(240, 320, CV_8UC3); // Realloziere Matrix

image.create(480, 640, CV_8UC3);

// Erzeuge eine Rotationsmatrix double phi = CV_PI / 4; Mat rot = (Mat_<float>(2,2) << cos(phi), -sin(phi), sin(phi), cos(phi));

}

Lehrstuhl für Datenverarbeitung CMakeLists.txt T e c h n i s c h e U

Lehrstuhl für Datenverarbeitung

CMakeLists.txt

Technische Universität München

U n i v e r s i t ä t M ü n c h

cmake_minimum_required(VERSION 2.8)

FIND_PACKAGE(OpenCV REQUIRED) include_directories(${OPENCV_INCLUDE_DIR}) add_executable( test main.cpp) target_link_libraries( test ${OPENCV_LIBS} cv cxcore)

Lehrstuhl für Datenverarbeitung Datentypen von OpenCV • Templatebasierte Datentypen: – Grundtyp DataType T e c

Lehrstuhl für Datenverarbeitung

Datentypen von OpenCV

Templatebasierte Datentypen:

Grundtyp DataType

Technische Universität München

U n i v e r s i t ä t M ü n c h

OpenCV unterstützt folgende Datentypen:

bool

(un)signed char

(un)signed short

int

float, double

Tupel dieser Datentypen

CV_<Bit-Tiefe>{U|S|F}C<Zahl_der_Kanäle>

z.B. CV_8U, CV_32FC3

Lehrstuhl für Datenverarbeitung Datentypen von OpenCV • Point_ T e c h n i s

Lehrstuhl für Datenverarbeitung

Datentypen von OpenCV

Point_

Technische Universität München

U n i v e r s i t ä t M ü n c h

Templateklasse für zweidimensionale Punkte

Methoden für Skalarprodukt, einfache Arithmetik und L2-Norm

Shortcuts für vordefinierte Typen:

typedef Point_<int> Point2i;

typedef Point2i Point;

Typedef Point_<float> Point2f;

Beispiel:

Point2f a(0.5f, 0.0f), b(0.0f, -0.4f);

Point pt = (a + b)

* 10.0f;

Point3_ für 3-D

Lehrstuhl für Datenverarbeitung Datentypen von OpenCV T e c h n i s c h

Lehrstuhl für Datenverarbeitung

Datentypen von OpenCV

Technische Universität München

U n i v e r s i t ä t M ü n c h

Vec

Templateklasse für Vektoren beliebiger Dimension typedef Vec<uchar, 3> Vec3b;

einfache Arithmetik, L2-Norm und Kreuzprodukt für 3-D Vektoren

Zugriff auf Einträge des Vektors mit [ ]-Operator

Spezialfall von cv::Mat

Scalar_

4-elementiger (!) Vektor, abgeleitet von Vec<_Tp, 4>

Wird benutzt um Farbwerte von Pixeln weiterzugeben (RGB + Alpha)

Lehrstuhl für Datenverarbeitung Datentypen von OpenCV • Rect_ T e c h n i s

Lehrstuhl für Datenverarbeitung

Datentypen von OpenCV

Rect_

Technische Universität München

U n i v e r s i t ä t M ü n c h

zweidimensionale Rechtecke

ausgerichtet an den Achsen des Bildes (ansonsten: RotatedRect)

Wird mit den Koordinaten der linken oberen Ecke beschrieben

Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);

Obere und linke Grenze gehören zum Reckteck, rechte und untere nicht:

Rect_::contains(const Point_<_Tp>& pt) == true, falls x <= pt.x < x+width, y <= pt.y < y + height

Wird benutzt, um ROIs zu definieren

Lehrstuhl für Datenverarbeitung Datentypen von OpenCV • Mat T e c h n i s

Lehrstuhl für Datenverarbeitung

Datentypen von OpenCV

Mat

Technische Universität München

U n i v e r s i t ä t M ü n c h

n-dimensionale Matrix, Standardformat für Bilder in OpenCV

Dimension der Matrix: int rows, int cols entspricht bei Bildern der Bildgröße (Achtung: y,x)

Anzahl der Farbkanäle: int channels()

Farbtiefe: int depth()

Bilddaten: uchar* data

z.B. cv::Mat (480, 640, CV_8UC3); für ein Farbbild mit 640x480 Pixel

und 8 bit Farbtiefe

Bitte beachten: 8U-Bilder haben einen Wertebereich von 0-255, Bilder in Fließkommaformaten einen Bereich von 0-1

Lehrstuhl für Datenverarbeitung Datentypen von OpenCV • Matrix initialisieren T e c h n i

Lehrstuhl für Datenverarbeitung

Datentypen von OpenCV

Matrix initialisieren

Technische Universität München

U n i v e r s i t ä t M ü n c h

Mat A = Mat(480, 640, CV_8UC3, Scalar::all(0));

Mat B = Mat::ones(480, 640, CV_8UC3) * 128;

Mat C = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);

Einzelnes Pixel adressieren

vector<Mat> planes;

split(A, planes);

unsigned char& c = planes[0].at<uchar>(y,x); // Referenz beachten!

c=42;

Alternativ:

Vec3b& v = A.at<Vec3b>(y, x); // Referenz beachten!

v = Vec3b::all(saturate_cast<uchar>(v[0] + v[1]));

Lehrstuhl für Datenverarbeitung Datentypen von OpenCV T e c h n i s c h

Lehrstuhl für Datenverarbeitung

Datentypen von OpenCV

Technische Universität München

U n i v e r s i t ä t M ü n c h

Vereinfachte Speicherverwaltung durch Smart Pointers und Reference-Counters

Mat A(480, 640, CV_64F);

Mat B = A; // Kopiert nur den Header, keine Daten

Mat C = B.clone(); // Kopiert auch Daten

Region-of-Interests (ROIs)

Rect roi(10, 20, 100, 50); Mat image_roi = A(roi); // nur Verweis, keine Datenkopie

Lehrstuhl für Datenverarbeitung Komponenten von OpenCV • imgproc: T e c h n i s

Lehrstuhl für Datenverarbeitung

Komponenten von OpenCV

imgproc:

Technische Universität München

U n i v e r s i t ä t M ü n c h

Methoden zur Bildverarbeitung

Histogramme

Filter

Geometrische Bildtransformationen

weitere Bildtransformationen, z.B. Farbraumkonvertierung

Strukturanalyse und Formdeskriptoren

Bewegungsanalyse, Objekt-Tracking

Merkmalserkennung

Objekterkennung

Lehrstuhl für Datenverarbeitung Komponenten von OpenCV • highgui: – High-level GUI & Medien I/O –

Lehrstuhl für Datenverarbeitung

Komponenten von OpenCV

highgui:

High-level GUI & Medien I/O

imshow

imdecode

imencode

imread

imwrite

VideoCapture

VideoWriter

 

Technische Universität München

… T e c h n i s c h e U n i v e
Lehrstuhl für Datenverarbeitung Bilder laden T e c h n i s c h e

Lehrstuhl für Datenverarbeitung

Bilder laden

Technische Universität München

U n i v e r s i t ä t M ü n c h

Mat imread(const string& filename, int flags=1)

Flags definiert die Farbtiefe des Bildes

Flags > 0: erzwingt 3-Kanal-Farbbild

Flags = 0: gibt Graustufenbild zurück (unabhängig von Datei)

Flags < 0: Farbtiefe entsprechend Dateiformat

Unterstützte Formate

Windows Bitmap .bmp, .dib

Portable Image Format .pbm, .pgm, .ppm

JPEG*

JP2K*

Portable Network Graphics .png*

Sun Rasterformat .sr, .ras

TIFF .tiff, .tif*

* Dateiformat muss vom OS unterstützt werden (zusätzliche Codecs)

Lehrstuhl für Datenverarbeitung Bilder speichern T e c h n i s c h e

Lehrstuhl für Datenverarbeitung

Bilder speichern

Technische Universität München

U n i v e r s i t ä t M ü n c h

bool imwrite(const string& filename, const Mat& img, const vector<int>& params=vector<int>())

filename: Dateiname

img: Bild, das gespeichert werden soll

params: Formatspezifische Parameter, Paar aus (id, value)

z.B. JPEG Qualität (CV_IMWRITE_JPEG_QUALITY), zwischen 0 und 100,

Standard: 95

Lehrstuhl für Datenverarbeitung T e c h n i s c h e U n

Lehrstuhl für Datenverarbeitung

Technische Universität München

U n i v e r s i t ä t M ü n c h

OpenCV imgproc & highgui Demo 1

#include <opencv/cv.h>

#include <opencv/highgui.h>

using namespace cv;

int main(int argc, char *argv[])

{

 

Mat img = imread(" /image.png"); Mat gray;

cvtColor( img, gray, CV_RGB2GRAY );

imwrite("output.jpg", gray); return 0;

}

Lehrstuhl für Datenverarbeitung Bilder im Fenster anzeigen T e c h n i s c

Lehrstuhl für Datenverarbeitung

Bilder im Fenster anzeigen

Technische Universität München

U n i v e r s i t ä t M ü n c h

HighGUI bietet Methoden, um Bilder direkt mit OpenCV anzuzeigen

void namedWindow(const string& winname, int flags)

winname: Name des Fensters in der Titelzeile, dient auch als handle

flags: CV_WINDOW_NORMAL, CV_WINDOW_AUTOSIZE,

CV_WINDOW_FREERATIO, CV_WINDOW_KEEPRATIO…

void imshow(const string& winname, const Mat& image)

Lehrstuhl für Datenverarbeitung T e c h n i s c h e U n

Lehrstuhl für Datenverarbeitung

Technische Universität München

U n i v e r s i t ä t M ü n c h

VideoCapture Klasse Demo 2

VideoCapture capture; Mat frame;

capture.open(0); //Oeffne erste Kamera /dev/video0

if ( !capture.isOpened())

{

cout << "Could not open Camera" << endl; return -1;

}

namedWindow( "Video", CV_WINDOW_AUTOSIZE ); capture >> frame; imshow( "Video", frame );

Lehrstuhl für Datenverarbeitung T e c h n i s c h e U n

Lehrstuhl für Datenverarbeitung

Technische Universität München

U n i v e r s i t ä t M ü n c h

Bildverarbeitung (Filter) Demo 3

Zahlreiche Methoden zur Bildverarbeitung, z.B. Kantendetektionsfilter, Rangordnungsfilter (Median), Weichzeichner, morphologische Operatoren…

Mat img = imread("

cvtColor(img, gray, CV_RGB2GRAY);

/image.png");

Mat gray;

Mat sobelimg; Sobel(gray, sobelimg, CV_32F, 1, 0);

double minVal, maxVal; minMaxLoc(sobelimg, &minVal, &maxVal); //Findet kleinsten und größten Wert

Mat draw;

sobelimg.convertTo(draw, CV_8U, 255.0/(maxVal - minVal));

Lehrstuhl für Datenverarbeitung Und noch vieles mehr… T e c h n i s c

Lehrstuhl für Datenverarbeitung

Und noch vieles mehr…

Technische Universität München

U n i v e r s i t ä t M ü n c h

Optischer Fluss

Objektdetektion (Kaskadenklassifikation) Demo 5

Clustering und schnelle Suche in hochdimensionalen Daten

Kamerakalibrierung, 3-D Rekonstruktion

Algorithmen für maschinelles Lernen

siehe Dokumentation, Beispiele und Tutorials

Lehrstuhl für Datenverarbeitung Hausaufgabe T e c h n i s c h e U

Lehrstuhl für Datenverarbeitung

Hausaufgabe

Technische Universität München

U n i v e r s i t ä t M ü n c h

Programmiert ein Programm, welches ein Farbbild einliest, folgenden Operationen darauf vornimmt und jeweils als neues Bild abspeichert:

Konvertierung in ein Graustufenbild

Erstellung eines Kantenbildes vom Graustufenbild (mittels Laplace-Operator)

– Invertierung des Farbbildes („Negativbild“)

Eine Methode, welche in jedem Pixel in allen 3 Kanälen den dominierenden Farbwert findet. Die beiden anderen Kanäle werden jeweils auf 0 gesetzt. Aus

einem Pixel mit den RGB-Farbwerten (33, 45, 120) wird dann ein Pixel mit (0, 0,

120)

Abgabe bis zum 6.12. im /phomes/cpp-Verzeichnis