Introduction to OpenCV (with Java)

Post on 26-Jan-2015

120 views 4 download

description

A brief introduction to OpenCV 2.x (with Java) for the Computer Vision course at Politecnico di Torino (academic year 2013/2014).

Transcript of Introduction to OpenCV (with Java)

Introduction to

OpenCV

Computer Vision Luigi De Russis

OpenCV in brief

OpenC… what?

07/11/2013

2

Introduction to OpenCV

What is OpenCV?

07/11/2013 Introduction to OpenCV

3

Open source Computer Vision library

BSD License

http://opencv.org

Originally developed by Intel

Has more than 2500 optimized algorithms

Supports a lot of different languages

C, C++, Python, Java

but is written natively in C++

Cross platform

also available for Android and iOS

What it is used for?

07/11/2013 Introduction to OpenCV

4

Human-Computer Interaction (HCI)

Object Identification

Object Recognition

Face Recognition

Gesture Recognition

Motion Tracking

Image Processing

Mobile Robotics

… and so on

Always ask “why?”

Motivations - OpenCV

07/11/2013

5

Introduction to OpenCV

Why OpenCV?

07/11/2013 Introduction to OpenCV

6

vs.

OpenCV: pros

07/11/2013 Introduction to OpenCV

7

Specificity

OpenCV was made for image processing

Matlab is quite generic

Speed

30+ frames processed per seconds in real time image processing with OpenCV

around 4-5 frames processed per seconds in real time image processing with Matlab

Efficient

Matlab needs more system resources than OpenCV

OpenCV: cons

07/11/2013 Introduction to OpenCV

8

Easy of use

Matlab won hands down!

Integrated Development Environment (IDE)

you can use Eclipse, Netbeans, Visual Studio, Qt,

XCode, … even a simple text editor for OpenCV

Matlab has is own IDE

Memory management

OpenCV: pros (final)

07/11/2013 Introduction to OpenCV

9

Price (!)

OpenCV Wrappers

SimpleCV, Emgu CV, ruby-opencv…

More similar to industry-level frameworks

When Java meets OpenCV

Motivation - Java

07/11/2013

10

Introduction to OpenCV

Some facts…

07/11/2013 Introduction to OpenCV

11

The OpenCV APIs have few capabilities for user interfaces

i.e. you can open a window with an image inside. Do you want a button? You cannot have it!

to have a “decent” user interface you need to install “something else” (e.g., Qt for C++)…

… and then compile OpenCV for adding Qt support

C++ learning curve is quite… steep

source: experiences from teaching this course in the last years

Some (other) facts…

07/11/2013 Introduction to OpenCV

12

OpenCV C++ APIs exists since OpenCV 1.0

It is possible, but not recommended, to “mix” different

OpenCV version

Typically, it is a good way to get into trouble!

It is possible to use OpenCV C APIs together with

C++ APIs

Typically it is a good way to get into trouble!

Some (other) facts…

07/11/2013 Introduction to OpenCV

13

OpenCV C++ API exists since OpenCV 1.0

It is possible, but not recommended, to “mix” different

OpenCV version

Typically, it is a good way to get into trouble!

It is possible to use OpenCV C APIs together with

C++ APIs

Typically it is a good way to get into trouble!

Yeah, some students did it!

A better world is possible?

07/11/2013 Introduction to OpenCV

14

OpenCV provides also the Java APIs

nothing to compile (on Windows)

they works on Android, also

Java 7 has a first-grade user interface

not Swing, but JavaFX

http://www.oracle.com/technetwork/java/javafx

Almost everybody here should have some (basic) experience with Java

Performance between the C++ APIs and the Java APIs are comparable

A better world is possible?

07/11/2013 Introduction to OpenCV

15

The OpenCV Java APIs are almost identical to the C++ version

knowledge can be transferred!

examples:

to store an image in memory both use the Mat object

to write an image on disk both use the imwrite method

Something change a bit

examples:

CV_RGB2GRAY (C++) becomes COLOR_RGB2GRAY (Java)

Point, Point2d, Point2f (C++) becomes 3 overloaded constructor of Point (Java)

A better world is possible?

07/11/2013 Introduction to OpenCV

16

Question:

is OpenCV with Java/JavaFX the “best” solution for

every application?

A better world is possible?

07/11/2013 Introduction to OpenCV

17

Question:

is OpenCV with Java/JavaFX the “best” solution for

every application?

Response:

No, obviously

Do you need a GUI? Go with JavaFX!

Do you have memory constraint? Go with C/C++!

Please, no extremism!

Getting started with OpenCV and Java

OpenCV meets Java

07/11/2013

18

Introduction to OpenCV

Modules

07/11/2013 Introduction to OpenCV

19

core

basic structures and algorithms

imgproc

image processing algorithms (such as image filtering, geometrical image transformations, histograms, etc.)

video

video analysis (such as motion estimation and object tracking)

OpenCV has a modular structure:

the package includes several shared or static libraries

Modules

07/11/2013 Introduction to OpenCV

20

highgui

basic operation to read/write/encode images; in C, C++ and Python it provides also basic UI capabilities

calib3d

camera calibration and 3D reconstruction

features2d

2D features framework (feature detectors, descriptors, and descriptor matchers)

objdetect

detection of objects and other items (e.g., faces, eyes, mugs, people, …)

Modules

07/11/2013 Introduction to OpenCV

21

ml

machine learning classes used for statistical

classification, regression and clustering of data

gpu

GPU-accelerated algorithms

photo

computational photography

ccl

OpenCL-accelerated algorithms

Data Structures

07/11/2013 Introduction to OpenCV

22

We speak about Java API

All the OpenCV classes and methods are placed into the org.opencv.* packages

Mat

the primary image structure in OpenCV 2.x

overcomes the “old” IplImage/CvMat problems (OpenCV 1.x/C API)

automatic memory management (more or less in C++)

two data parts:

matrix header (contains information about the matrix)

a pointer to the matrix containing the pixel values

Data Structures

07/11/2013 Introduction to OpenCV

23

Point

2D point

defined by x, y coordinates Point first = new Point(2, 3);

Size

2D size structure

specify the size (width and height) of an image or rectangle

Rect

2D rectangle object

Basic Image I/O

07/11/2013 Introduction to OpenCV

24

Highgui.imread

loads an image from file and return the corresponding Mat

object Mat Highgui.imread(String filename,

int flags)

Highui.imwrite

save an image on disk bool Highgui.imwrite(String filename,

Mat img, MatOfInt params)

Basic Drawing Operations

07/11/2013 Introduction to OpenCV

25

Core.circle

draws a simple or filled circle with a given center and radius on a

given image

Core.line

draws a line between two point in the given image

Core.ellipse

draws an ellipse outline, a filled ellipse, an elliptic arc, a filled

ellipse sector, …

Core.rectangle

draws a rectangle outline or a filled rectangle

note that negative thickness will fill the rectangle

Color Spaces

07/11/2013 Introduction to OpenCV

26

Imgproc.cvtColor

converts an input image from one color space to another

examples:

cvtColor(src, dest, Imgproc.COLOR_RGB2GRAY);

cvtColor(src, dest, Imgproc.COLOR_HSV2BGR);

cvtColor(src, dest, Imgproc.COLOR_RGB2BGR);

Important! Images in OpenCV uses BGR instead of RGB

Getting started (without going crazy)

Let’s get practical!

07/11/2013

27

Introduction to OpenCV

How can we use OpenCV?

07/11/2013 Introduction to OpenCV

28

LABINF:

already installed under Windows

version 2.4.6

Eclipse (Kepler) is the IDE

At home:

you can use whatever IDE you like

but we give full support only for Eclipse

Installation:

see the PDF document in the teaching portal

What if I got problems?

07/11/2013 Introduction to OpenCV

29

Small problems

drop me a line luigi.derussis@polito.it

Normal problems

come to office hours

every Wednesday, 9:00 - 11:00

LAB6, second floor of DAUIN

please send an e-mail beforehand

Enormous problems

pray?

no, seriously, we can schedule an extra “lesson”

Awesome student to me

Hi,

[…] I’m using “cvtColor(image, gray, COLOR_BGR2GRAY);” but it give this exception: […]

Can you help me?

Regards,

Problems with JavaFX and a gray scale image

What if I got problems?

07/11/2013 Introduction to OpenCV

30

Small problems

drop me a line luigi.derussis@polito.it

Normal problems

come to office hours

every Wednesday, 9:00 - 11:00

LAB6, second floor of DAUIN

please send an e-mail beforehand

Enormous problems

pray?

no, seriously, we can schedule an extra “lesson”

Not-So-Awesome student to me

Hi,

[…] I followed the guide for installing OpenCV on my Mac but I have an error after step 3. Can

we meet on next Wednesday to solve the problem?

Thanks!

Regards,

OpenCV installation

What if I got problems?

07/11/2013 Introduction to OpenCV

31

Small problems

drop me a line luigi.derussis@polito.it

Normal problems

come to office hours

every Wednesday, 9:00 - 11:00

LAB6, second floor of DAUIN

please send an e-mail beforehand

Enormous problems

pray?

no, seriously, we can schedule an extra “lesson”

Good student to me

Hi,

[…] I see the solution of Exercise 2.1 but I don’t understand the following expressions:

- main();

- System.out.println();

- @Override.

Can you explain to me what they are?

Regards,

Help with OpenCV

An e-mail not to be sent!

07/11/2013 Introduction to OpenCV

32

Useful Resources…

07/11/2013 Introduction to OpenCV

33

OpenCV Wiki

http://code.opencv.org/projects/opencv/wiki

OpenCV Official Documentation

http://docs.opencv.org/

User Q&A forum

http://answers.opencv.org/questions/

OpenCV Javadocs

http://docs.opencv.org/java/

JavaFX Documentation

http://www.oracle.com/technetwork/java/javafx/documentation

Put everything together

Demo Hour

07/11/2013

34

Introduction to OpenCV

License

07/11/2013 Introduction to OpenCV

35

This work is licensed under the Creative Commons “Attribution-NonCommercial-ShareAlike Unported (CC BY-NC-SA 3,0)” License.

You are free:

to Share - to copy, distribute and transmit the work

to Remix - to adapt the work

Under the following conditions:

Attribution - You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).

Noncommercial - You may not use this work for commercial purposes.

Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.

To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/