3. What is 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
Introduction to OpenCV
07/11/2013
4. What it is used for?
4
ī¨
ī¨
ī¨
ī¨
ī¨
ī¨
ī¨
ī¨
ī¨
Human-Computer Interaction (HCI)
Object Identification
Object Recognition
Face Recognition
Gesture Recognition
Motion Tracking
Image Processing
Mobile Robotics
âĻ and so on
Introduction to OpenCV
07/11/2013
7. OpenCV: pros
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
Introduction to OpenCV
needs more system resources than OpenCV
07/11/2013
8. OpenCV: cons
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
Introduction to OpenCV
07/11/2013
9. OpenCV: pros (final)
9
ī¨
ī¨
Price (!)
OpenCV Wrappers
ī¤ SimpleCV,
ī¨
Emgu CV, ruby-opencvâĻ
More similar to industry-level frameworks
Introduction to OpenCV
07/11/2013
11. Some factsâĻ
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
Introduction to OpenCV
07/11/2013
12. Some (other) factsâĻ
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
Introduction to OpenCV
it is a good way to get into trouble!
07/11/2013
13. Some (other) factsâĻ
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!
Yeah, some students did it!
ī¨
It is possible to use OpenCV C APIs together with
C++ APIs
ī¤ Typically
Introduction to OpenCV
it is a good way to get into trouble!
07/11/2013
14. A better world is possible?
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
Introduction to OpenCV
07/11/2013
15. A better world is possible?
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)
Introduction to OpenCV
07/11/2013
16. A better world is possible?
16
ī¨
Question:
ī¤ is
OpenCV with Java/JavaFX the âbestâ solution for
every application?
Introduction to OpenCV
07/11/2013
17. A better world is possible?
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!
Introduction to OpenCV
07/11/2013
19. Modules
19
OpenCV has a modular structure:
the package includes several shared or static libraries
ī¨
core
ī¤
ī¨
imgproc
ī¤
ī¨
basic structures and algorithms
image processing algorithms (such as image filtering,
geometrical image transformations, histograms, etc.)
video
ī¤
video analysis (such as motion estimation and object
tracking)
Introduction to OpenCV
07/11/2013
20. Modules
20
ī¨
highgui
ī¤
ī¨
calib3d
ī¤
ī¨
camera calibration and 3D reconstruction
features2d
ī¤
ī¨
basic operation to read/write/encode images; in C, C++
and Python it provides also basic UI capabilities
2D features framework (feature detectors, descriptors, and
descriptor matchers)
objdetect
ī¤
detection of objects and other items (e.g., faces, eyes, mugs,
people, âĻ)
Introduction to OpenCV
07/11/2013
21. Modules
21
ī¨
ml
ī¤ machine
learning classes used for statistical
classification, regression and clustering of data
ī¨
gpu
ī¤ GPU-accelerated
ī¨
photo
ī¤ computational
ī¨
algorithms
photography
ccl
ī¤ OpenCL-accelerated
Introduction to OpenCV
algorithms
07/11/2013
22. Data Structures
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
īŽ
Introduction to OpenCV
07/11/2013
23. Data Structures
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
Introduction to OpenCV
07/11/2013
24. Basic Image I/O
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)
Introduction to OpenCV
07/11/2013
25. Basic Drawing Operations
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
Introduction to OpenCV
07/11/2013
26. Color Spaces
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
Introduction to OpenCV
07/11/2013
28. How can we use 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
Introduction to OpenCV
07/11/2013
29. What if I got problems?
29
ī¨
Small problems
ī¤
drop me a line
īŽ
ī¨
luigi.derussis@polito.it
Normal problems
Problems with JavaFX and a gray scale image
Awesome student to me
Hi,
[âĻ] Iâm using âcvtColor(image, gray, COLOR_BGR2GRAY);â but it give this exception: [âĻ]
Can you help me?
come to office hours
ī¤ every Wednesday, 9:00 - 11:00
ī¤ LAB6, second floor of DAUIN
ī¤ please send an e-mail beforehand
ī¤
ī¨
Regards,
âĻ
Enormous problems
pray?
ī¤ no, seriously, we can schedule an extra âlessonâ
ī¤
Introduction to OpenCV
07/11/2013
30. What if I got problems?
30
OpenCV installation
ī¨
Small problems
ī¤
drop me a line
īŽ
ī¨
luigi.derussis@polito.it
Normal problems
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,
âĻ
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â
ī¤
Introduction to OpenCV
07/11/2013
31. What if I got problems?
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
ī¤
Help with OpenCV
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?
ī¨
Enormous problems
Regards,
âĻ
pray?
ī¤ no, seriously, we can schedule an extra âlessonâ
ī¤
Introduction to OpenCV
07/11/2013
32. An e-mail not to be sent!
32
Introduction to OpenCV
07/11/2013
33. Useful ResourcesâĻ
33
ī¨
OpenCV Wiki
ī¤
ī¨
OpenCV Official Documentation
ī¤
ī¨
http://answers.opencv.org/questions/
OpenCV Javadocs
ī¤
ī¨
http://docs.opencv.org/
User Q&A forum
ī¤
ī¨
http://code.opencv.org/projects/opencv/wiki
http://docs.opencv.org/java/
JavaFX Documentation
ī¤
http://www.oracle.com/technetwork/java/javafx/document
ation
Introduction to OpenCV
07/11/2013
35. License
35
ī¨
ī¨
This work is licensed under the Creative Commons âAttributionNonCommercial-ShareAlike Unported (CC BY-NC-SA 3,0)â License.
You are free:
ī¤
ī¤
ī¨
Under the following conditions:
ī¤
ī¤
ī¤
ī¨
to Share - to copy, distribute and transmit the work
to Remix - to adapt the work
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/
Introduction to OpenCV
07/11/2013