The OpenCV Tutorials Release 2.4.9.0 April 21, 2014 CONTENTS 1 Introduction to OpenCV 5 1.1 Installation in Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2 Using OpenCV with gcc and CMake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3 Using OpenCV with Eclipse (plugin CDT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4 Installation in Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.5 How to build applications with OpenCV inside the Microsoft Visual Studio . . . . . . . . . . . . . . 28 1.6 Image Watch: viewing in-memory images in the Visual Studio debugger . . . . . . . . . . . . . . . 34 1.7 Introduction to Java Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1.8 Using OpenCV Java with Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 1.9 Introduction to OpenCV Development with Clojure . . . . . . . . . . . . . . . . . . . . . . . . . . 57 1.10 Introduction into Android Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 1.11 OpenCV4Android SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 1.12 Android Development with OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 1.13 Installation in iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 1.14 Cross compilation for ARM based Linux systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 1.15 Load and Display an Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 1.16 Load, Modify, and Save an Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 1.17 How to write a tutorial for OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 2 core module. The Core Functionality 135 2.1 Mat - The Basic Image Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 2.2 How to scan images, lookup tables and time measurement with OpenCV . . . . . . . . . . . . . . . 143 2.3 Mask operations on matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 2.4 Adding (blending) two images using OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 2.5 Changing the contrast and brightness of an image! . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 2.6 Basic Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 2.7 Random generator and text with OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 2.8 Discrete Fourier Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 2.9 File Input and Output using XML and YAML files . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 2.10 Interoperability with OpenCV 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 3 imgproc module. Image Processing 181 3.1 Smoothing Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 3.2 Eroding and Dilating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 3.3 More Morphology Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 3.4 Image Pyramids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 3.5 Basic Thresholding Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 3.6 Making your own linear filters! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 3.7 Adding borders to your images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 i 3.8 Sobel Derivatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 3.9 Laplace Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 3.10 Canny Edge Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 3.11 Hough Line Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 3.12 Hough Circle Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 3.13 Remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 3.14 Affine Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 3.15 Histogram Equalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 3.16 Histogram Calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 3.17 Histogram Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 3.18 Back Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 3.19 Template Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 3.20 Finding contours in your image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 3.21 Convex Hull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 3.22 Creating Bounding boxes and circles for contours . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 3.23 Creating Bounding rotated boxes and ellipses for contours . . . . . . . . . . . . . . . . . . . . . . . 300 3.24 Image Moments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 3.25 Point Polygon Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 4 highgui module. High Level GUI and Media 307 4.1 Adding a Trackbar to our applications! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 4.2 Video Input with OpenCV and similarity measurement . . . . . . . . . . . . . . . . . . . . . . . . . 311 4.3 Creating a video with OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 5 calib3d module. Camera calibration and 3D reconstruction 325 5.1 Camera calibration with square chessboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 5.2 Camera calibration With OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 6 feature2d module. 2D Features framework 337 6.1 Feature Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 6.2 Harris corner detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 6.3 Feature Matching with FLANN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 6.4 Features2D + Homography to find a known object . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 6.5 Shi-Tomasi corner detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 6.6 Creating yor own corner detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 6.7 Detecting corners location in subpixeles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 6.8 Feature Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 6.9 Feature Matching with FLANN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 6.10 Features2D + Homography to find a known object . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 6.11 Detection of planar objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 7 video module. Video analysis 371 8 objdetect module. Object Detection 373 8.1 Cascade Classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 9 ml module. Machine Learning 379 9.1 Introduction to Support Vector Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 9.2 Support Vector Machines for Non-Linearly Separable Data . . . . . . . . . . . . . . . . . . . . . . . 385 10 gpu module. GPU-Accelerated Computer Vision 393 10.1 Similarity check (PNSR and SSIM) on the GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 11 contrib module. The additional contributions made available ! 403 11.1 Discovering the human retina and its use for image processing . . . . . . . . . . . . . . . . . . . . . 404 ii 12 OpenCV iOS 417 12.1 OpenCV iOS Hello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 12.2 OpenCV iOS - Image Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 12.3 OpenCV iOS - Video Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 13 OpenCV Viz 431 13.1 Launching Viz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 13.2 Pose of a widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 13.3 Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 13.4 Creating Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 14 General tutorials 445 iii iv The OpenCV Tutorials, Release 2.4.9.0 The following links describe a set of basic OpenCV tutorials. All the source code mentioned here is provide as part of the OpenCV regular releases, so check before you start copy & pasting the code. The list of tutorials below is automatically generated from reST files located in our GIT repository. As always, we would be happy to hear your comments and receive your contributions on any tutorial. • Introduction to OpenCV You will learn how to setup OpenCV on your computer! • core module. The Core Functionality Here you will learn the about the basic building blocks of the library. A must read and know for understanding how to manipulate the images on a pixel level. • imgproc module. Image Processing In this section you will learn about the image processing (manipulation) functions inside OpenCV. • highgui module. High Level GUI and Media This section contains valuable tutorials about how to read/save your im- age/video files and how to use the built-in graphical user interface of the library. • calib3d module. Camera calibration and 3D reconstruction Although we got most of our images in a 2D format they do come from a 3D world. Here you will learn how to find out from the 2D images information about the 3D world. • feature2d module. 2D Features framework CONTENTS 1 The OpenCV Tutorials, Release 2.4.9.0 Learn about how to use the feature points detectors, descriptors and match- ing framework found inside OpenCV. • video module. Video analysis Look here in order to find use on your video stream algorithms like: motion extraction, feature tracking and foreground extractions. • objdetect module. Object Detection Ever wondered how your digital camera detects peoples and faces? Look here to find out! • ml module. Machine Learning Use the powerfull machine learning classes for statistical classification, re- gression and clustering of data. • gpu module. GPU-Accelerated Computer Vision Squeeze out every little computation power from your system by using the power of your video card to run the OpenCV algorithms. • contrib module. The additional contributions made available ! Discover additional contribution to OpenCV. • OpenCV iOS 2 CONTENTS The OpenCV Tutorials, Release 2.4.9.0 Run OpenCV and your vision apps on an iDevice • OpenCV Viz These tutorials show how to use Viz module effectively. • General tutorials These tutorials are the bottom of the iceberg as they link together multiple of the modules presented above in order to solve complex problems. CONTENTS 3 The OpenCV Tutorials, Release 2.4.9.0 4 CONTENTS [...]... the opencv libraries reside, in my case the path is: /usr/local/lib Then in Libraries(-l) add the OpenCV libraries that you may need Usually just the 3 first on the list below are enough (for simple applications) In my case, I am putting all of them since I plan to use the whole bunch: opencv_ core opencv_ imgproc opencv_ highgui opencv_ ml opencv_ video opencv_ features2d opencv_ calib3d opencv_ objdetect opencv_ contrib... opencv_ contrib opencv_ legacy opencv_ flann 1.3 Using OpenCV with Eclipse (plugin CDT) 15 The OpenCV Tutorials, Release 2.4.9. 0 If you don’t know where your libraries are (or you are just psychotic and want to make sure the path is fine), type in Terminal: pkg-config libs opencv My output (in case you want to check) was: code-block:: bash -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml... Demiröz s A tutorial on how to use OpenCV Java with Eclipse Title: Introduction to OpenCV Development with Clojure Compatibility: > OpenCV 2.4.4 Author: Mimmo Cosenza A tutorial on how to interactively use OpenCV from the Clojure REPL • Android 6 Chapter 1 Introduction to OpenCV The OpenCV Tutorials, Release 2.4.9. 0 Title: Introduction into Android Development Compatibility: > OpenCV 2.4.2 Author: Vsevolod... hold the build directory of our OpenCV library that we use in our projects Start up a command window and enter: setx -m OPENCV_ DIR D: \OpenCV\ Build\x86\vc10 setx -m OPENCV_ DIR D: \OpenCV\ Build\x64\vc10 (suggested for Visual Studio 2010 - 32 bit Windows) (suggested for Visual Studio 2010 - 64 bit Windows) setx -m OPENCV_ DIR D: \OpenCV\ Build\x86\vc11 setx -m OPENCV_ DIR D: \OpenCV\ Build\x64\vc11 (suggested... Title: OpenCV4 Android SDK Compatibility: > OpenCV 2.4.2 Author: Vsevolod Glumov OpenCV4 Android SDK: general info, installation, running samples Title: Android Development with OpenCV Compatibility: > OpenCV 2.4.3 Author: Vsevolod Glumov Development with OpenCV4 Android SDK • iOS Title: Installation in iOS Compatibility: > OpenCV 2.4.2 Author: Artem Myagkov, Eduard Feicho We will learn how to setup OpenCV. .. systems Compatibility: > OpenCV 2.4.4 Author: Alexander Smorkalov We will learn how to setup OpenCV cross compilation environment for ARM Linux • Common 7 The OpenCV Tutorials, Release 2.4.9. 0 Title: Load and Display an Image Compatibility: > OpenCV 2.0 Author: Ana Huamán We will learn how to display an image using OpenCV Title: Load, Modify, and Save an Image Compatibility: > OpenCV 2.0 Author: Ana... how to save an Image in OpenCV plus a small conversion to grayscale • Want to contribute, and see your own work between the OpenCV tutorials? Title: How to write a tutorial for OpenCV Compatibility: > OpenCV 1.0 Author: Bernát Gábor If you already have a good grasp on using OpenCV and have made some projects that would be perfect presenting an OpenCV feature not yet part of these tutorials, here it is... ONE INTRODUCTION TO OPENCV Here you can read tutorials about how to set up your computer to work with the OpenCV library Additionally you can find a few very basic sample source code that will let introduce you to the world of the OpenCV • Linux Title: Installation in Linux Compatibility: > OpenCV 2.0 Author: Ana Huamán We will learn how to setup OpenCV in your computer! Title: Using OpenCV with gcc and... System! 5 The OpenCV Tutorials, Release 2.4.9. 0 Title: How to build applications with OpenCV inside the Microsoft Visual Studio Compatibility: > OpenCV 2.0 Author: Bernát Gábor You will learn what steps you need to perform in order to use the OpenCV library inside a new Microsoft Visual Studio project Title: Image Watch: viewing in-memory images in the Visual Studio debugger Compatibility: >= OpenCV 2.4... libs opencv My output (in case you want to check) was: code-block:: bash -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann Now you are done Click OK • Your project should be ready to be built For this, go to Project->Build all In the Console you should get something . General tutorials 445 iii iv The OpenCV Tutorials, Release 2.4.9.0 The following links describe a set of basic OpenCV tutorials. All the source code mentioned here is provide as part of the OpenCV. card to run the OpenCV algorithms. • contrib module. The additional contributions made available ! Discover additional contribution to OpenCV. • OpenCV iOS 2 CONTENTS The OpenCV Tutorials, Release. Tutorials, Release 2.4.9.0 Run OpenCV and your vision apps on an iDevice • OpenCV Viz These tutorials show how to use Viz module effectively. • General tutorials These tutorials are the bottom of