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
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
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
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
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!
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!
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
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)
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!
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
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, …)
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
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
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)
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
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
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
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
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
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
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/