Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to OpenCV (with Java)

Introduction to OpenCV (with Java)

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

Luigi De Russis

November 07, 2013
Tweet

More Decks by Luigi De Russis

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. OpenCV: pros (final) 07/11/2013 Introduction to OpenCV 9  Price

    (!)  OpenCV Wrappers  SimpleCV, Emgu CV, ruby-opencv…  More similar to industry-level frameworks
  6. 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
  7. 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!
  8. 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!
  9. 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
  10. 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)
  11. A better world is possible? 07/11/2013 Introduction to OpenCV 16

     Question:  is OpenCV with Java/JavaFX the “best” solution for every application?
  12. 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!
  13. 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
  14. 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, …)
  15. 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
  16. 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
  17. 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
  18. 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)
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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/document ation
  26. 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/