introduction to opencv (with java)
DESCRIPTION
A brief introduction to OpenCV 2.x (with Java) for the Computer Vision course at Politecnico di Torino (academic year 2013/2014).TRANSCRIPT
![Page 1: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/1.jpg)
Introduction to
OpenCV
Computer Vision Luigi De Russis
![Page 2: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/2.jpg)
OpenCV in brief
OpenC… what?
07/11/2013
2
Introduction to OpenCV
![Page 3: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/3.jpg)
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
![Page 4: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/4.jpg)
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
![Page 5: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/5.jpg)
Always ask “why?”
Motivations - OpenCV
07/11/2013
5
Introduction to OpenCV
![Page 6: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/6.jpg)
Why OpenCV?
07/11/2013 Introduction to OpenCV
6
vs.
![Page 7: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/7.jpg)
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
![Page 8: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/8.jpg)
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
![Page 9: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/9.jpg)
OpenCV: pros (final)
07/11/2013 Introduction to OpenCV
9
Price (!)
OpenCV Wrappers
SimpleCV, Emgu CV, ruby-opencv…
More similar to industry-level frameworks
![Page 10: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/10.jpg)
When Java meets OpenCV
Motivation - Java
07/11/2013
10
Introduction to OpenCV
![Page 11: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/11.jpg)
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
![Page 12: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/12.jpg)
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!
![Page 13: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/13.jpg)
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!
![Page 14: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/14.jpg)
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
![Page 15: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/15.jpg)
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)
![Page 16: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/16.jpg)
A better world is possible?
07/11/2013 Introduction to OpenCV
16
Question:
is OpenCV with Java/JavaFX the “best” solution for
every application?
![Page 17: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/17.jpg)
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!
![Page 18: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/18.jpg)
Getting started with OpenCV and Java
OpenCV meets Java
07/11/2013
18
Introduction to OpenCV
![Page 19: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/19.jpg)
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
![Page 20: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/20.jpg)
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, …)
![Page 21: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/21.jpg)
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
![Page 22: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/22.jpg)
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
![Page 23: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/23.jpg)
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
![Page 24: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/24.jpg)
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)
![Page 25: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/25.jpg)
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
![Page 26: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/26.jpg)
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
![Page 27: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/27.jpg)
Getting started (without going crazy)
Let’s get practical!
07/11/2013
27
Introduction to OpenCV
![Page 28: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/28.jpg)
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
![Page 29: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/29.jpg)
What if I got problems?
07/11/2013 Introduction to OpenCV
29
Small problems
drop me a line [email protected]
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
![Page 30: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/30.jpg)
What if I got problems?
07/11/2013 Introduction to OpenCV
30
Small problems
drop me a line [email protected]
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
![Page 31: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/31.jpg)
What if I got problems?
07/11/2013 Introduction to OpenCV
31
Small problems
drop me a line [email protected]
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
![Page 32: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/32.jpg)
An e-mail not to be sent!
07/11/2013 Introduction to OpenCV
32
![Page 33: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/33.jpg)
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
![Page 34: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/34.jpg)
Put everything together
Demo Hour
07/11/2013
34
Introduction to OpenCV
![Page 35: Introduction to OpenCV (with Java)](https://reader030.vdocuments.site/reader030/viewer/2022020105/54c663f14a795937198b457b/html5/thumbnails/35.jpg)
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/