Computer Vision
         OpenCV
                       Luigi De Russis
                  Politecnico di Torino
Dipartimento di Automatica e Informatica (DAUIN)
                                    Torino - Italy
                          luigi.derussis@polito.it

This work is licensed under the Creative Commons (CC BY-SA)
                     License. To view a copy of this license, visit
                  http://creativecommons.org/licenses/by-sa/3.0/
What is OpenCV?
    Open source Computer Vision library
            http://opencv.org/
    Originally developed by Intel
    Has more than 2500 optimized algorithms
    C/C++/Python API
            it is written natively in C++
    Cross-platform
                                                                               includes a
            also available for Android and iOS
                                                                                Java API
    Released under a BSD license (it’s free)
    Current release version: 2.4.3RC (October 2012)
10/26/2012                        Luigi De Russis - Computer Vision - OpenCV            2
Various applications…
    Human-Computer Interaction (HCI)
    Object Identification
    Object Recognition
    Face Recognition
    Gesture Recognition
    Motion Tracking
    Image Processing
    Mobile Robotics
    … and so on.

10/26/2012          Luigi De Russis - Computer Vision - OpenCV   3
Why OpenCV? (I)
    Best competitor here: Matlab
    Pros
            Specific
                OpenCV was made for image processing
                Matlab is quite generic
            Speed
                around 30 frames processed per seconds in real time image
                 processing (OpenCV)
                around 4-5 frames processed per seconds in real time image
                 processing (Matlab)
            Efficient
                Matlab needs more system resources than OpenCV
10/26/2012                      Luigi De Russis - Computer Vision - OpenCV    4
Why OpenCV? (II)
    Cons
            Easy of use
            Integrated Development Environment
                you can use Eclipse, Netbeans, Visual Studio, Qt, XCode, … a
                 simple text editor for OpenCV
            Memory management
    Two more “pros”…
            Price (!)
            OpenCV Wrappers
                SimpleCV, JavaCV, Emgu CV, JavacvPro, …



10/26/2012                      Luigi De Russis - Computer Vision - OpenCV      5
Modules (I)
    OpenCV has a modular structure, i.e., the package
     includes several shared or static libraries:
            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)
            highgui
                built-in simple UI
                in addition, we will use Qt
10/26/2012                        Luigi De Russis - Computer Vision - OpenCV      6
Modules (II)
            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, …)
            ml
                 machine learning classes used for statistical classification,
                  regression and clustering of data
            gpu
                 GPU-accelerated algorithms
10/26/2012                         Luigi De Russis - Computer Vision - OpenCV      7
Data structures (I)
    We speak about C++ API
    All the OpenCV classes and functions are placed
     into the cv namespace
    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)
            two data parts:
                matrix header (contains information about the matrix)
                a pointer to the matrix containing the pixel values
10/26/2012                       Luigi De Russis - Computer Vision - OpenCV   8
Data structures (II)
    Point_ (Point2f, Point, Point2d)
            2D point
            defined by x, y coordinates
                Point first(2, 3);
    Size_ (Size, Size2f)
            2D size structure
            specify the size (width and height) of an image or
             rectangle
    Rect
            2D rectangle object

10/26/2012                   Luigi De Russis - Computer Vision - OpenCV   9
Image I/O
    Image I/O
            imread
                legge un’immagine da file e lo salva in un oggetto di tipo Mat
                 Mat imread(const string& filename, int flags=1)
            imwrite
                salva un’immagine su file
                 bool imwrite(const string& filename, InputArray img,
                 const vector<int>& params=vector<int>())
            imshow
                mostra un’immagine a schermo (in una finestra creata
                 precedentemente)
                 void imshow(const string& winname, InputArray mat)


10/26/2012                       Luigi De Russis - Computer Vision - OpenCV       10
Drawing operations
    Base drawing operations
            circle
                draws a simple or filled circle with a given center and radius on a
                 given image
            line
                draws a line between two point in the given image
            ellipse
                draws an ellipse outline, a filled ellipse, an elliptic arc, a filled
                 ellipse sector, …
            rectangle
                draws a rectangle outline or a filled rectangle
                note that negative thickness will fill the rectangle
10/26/2012                         Luigi De Russis - Computer Vision - OpenCV            11
Color spaces
    Converting color spaces
            cvtColor
                converts an input image from one color space to another
                examples:
                    cvtColor(src, dest, CV_RGB2GRAY);
                    cvtColor(src, dest, CV_HSV2BGR);
                    cvtColor(src, dest, CV_RGB2BGR);
            important, since images in OpenCV uses BGR instead of
             RGB




10/26/2012                       Luigi De Russis - Computer Vision - OpenCV   12
How we can use OpenCV?
    LABINF:
       already installed under Windows
      version 2.3.1

      Qt Creator (4.7.4) is the IDE to be used

    At home:
            feel free to install OpenCV version 2.4.3
                it should be more “stable”
            you can use whatever IDE you like
                but we give full support only for Qt Creator
    Installation:
            see the next set of slides for a step-by-step guide


10/26/2012                           Luigi De Russis - Computer Vision - OpenCV   13
What if I got problems?
    Small problems
            drop me a line                          Problems with Qt and a gray scale image

                luigi.derussis@polito.it
                                                     Awesome student to me

    Normal problems                                  Hi,
                                                      […] I’m using “cvtColor(image, gray, CV_BGR2GRAY);” and Indexed8 to convert an image in
                                                      gray scale but the image is not shown in Qt…

            come to office hours                     Can you help me?

                                                      Regards,
                                                      …
                every Tuesday, 9:00 - 11:00
                LAB6, second floor of DAUIN
                please send an e-mail beforehand
    Enormous problems
            come to the dedicated lessons
                Tuesday 30th October, 9:30-12:30, DAUIN
                Thursday 8th November, 15:00-18:00, DAUIN
10/26/2012                        Luigi De Russis - Computer Vision - OpenCV                                                                    14
What if I got problems?
                                                 OpenCV installation


    Small problems                              Not-So-Awesome student to me

            drop me a line                       Hi,
                                                  […] I followed the guide for installing OpenCV on my Mac but I have an error after step 3. Can
                                                  we meet on next Tuesday to solve the problem?
                luigi.derussis@polito.it         Thanks!

                                                  Regards,

    Normal problems                              …




            come to office hours
                every Tuesday, 9:00 - 11:00
                LAB6, second floor of DAUIN
                please send an e-mail beforehand
    Enormous problems
            come to the dedicated lessons
                Tuesday 30th October, 9:30-12:30, DAUIN
                Thursday 8th November, 15:00-18:00, DAUIN
10/26/2012                        Luigi De Russis - Computer Vision - OpenCV                                                                       15
What if I got problems?
    Small problems
            drop me a line
                luigi.derussis@polito.it
    Normal problems                             Help with OpenCV



            come to office hours                Good student to me

                                                  Hi,
                every Tuesday, 9:00 - 11:00      […] I see the solution of Exercise 2.1 but I don’t understand the following expressions:
                                                  -   main();
                                                  -   int* number;
                LAB6, second floor of DAUIN      -   &timer.
                                                  Can you explain to me what they are?


                please send an e-mail beforehand Regards,
                                                  …




    Enormous problems
            come to the dedicated lessons
                Tuesday 30th October, 9:30-12:30, DAUIN
                Thursday 8th November, 15:00-18:00, DAUIN
10/26/2012                        Luigi De Russis - Computer Vision - OpenCV                                                                 16
An mail not to be sent!!!




10/26/2012   Luigi De Russis - Computer Vision - OpenCV   17
Resources
   OpenCV Wiki
        http://code.opencv.org/projects/opencv/wiki
   OpenCV 2.x Official Documentation
        http://docs.opencv.org/
   User Q&A forum
        http://answers.opencv.org/questions/
   OpenCV 2.x Tutorials
        http://docs.opencv.org/opencv_tutorials.pdf


   Books:
        Robert Laganière, OpenCV 2 Computer Vision Application Programming
         Cookbook, Packt Publishing, ISBN 978-1849513241
        Gary Bradsky, Adrian Kaehler, Learning OpenCV: Computer Vision in C++ with
         the OpenCV Library, O'Reilly Media, ISBN 978-1449314651 (to be published)


10/26/2012                         Luigi De Russis - Computer Vision - OpenCV         18
License
  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.

26/10/2012                    Luigi De Russis - Computer Vision - OpenCV       19

Introduction to OpenCV

  • 1.
    Computer Vision OpenCV Luigi De Russis Politecnico di Torino Dipartimento di Automatica e Informatica (DAUIN) Torino - Italy luigi.derussis@polito.it This work is licensed under the Creative Commons (CC BY-SA) License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/
  • 2.
    What is OpenCV?  Open source Computer Vision library  http://opencv.org/  Originally developed by Intel  Has more than 2500 optimized algorithms  C/C++/Python API  it is written natively in C++  Cross-platform includes a  also available for Android and iOS Java API  Released under a BSD license (it’s free)  Current release version: 2.4.3RC (October 2012) 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 2
  • 3.
    Various applications…  Human-Computer Interaction (HCI)  Object Identification  Object Recognition  Face Recognition  Gesture Recognition  Motion Tracking  Image Processing  Mobile Robotics  … and so on. 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 3
  • 4.
    Why OpenCV? (I)  Best competitor here: Matlab  Pros  Specific  OpenCV was made for image processing  Matlab is quite generic  Speed  around 30 frames processed per seconds in real time image processing (OpenCV)  around 4-5 frames processed per seconds in real time image processing (Matlab)  Efficient  Matlab needs more system resources than OpenCV 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 4
  • 5.
    Why OpenCV? (II)  Cons  Easy of use  Integrated Development Environment  you can use Eclipse, Netbeans, Visual Studio, Qt, XCode, … a simple text editor for OpenCV  Memory management  Two more “pros”…  Price (!)  OpenCV Wrappers  SimpleCV, JavaCV, Emgu CV, JavacvPro, … 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 5
  • 6.
    Modules (I)  OpenCV has a modular structure, i.e., the package includes several shared or static libraries:  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)  highgui  built-in simple UI  in addition, we will use Qt 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 6
  • 7.
    Modules (II)  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, …)  ml  machine learning classes used for statistical classification, regression and clustering of data  gpu  GPU-accelerated algorithms 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 7
  • 8.
    Data structures (I)  We speak about C++ API  All the OpenCV classes and functions are placed into the cv namespace  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)  two data parts:  matrix header (contains information about the matrix)  a pointer to the matrix containing the pixel values 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 8
  • 9.
    Data structures (II)  Point_ (Point2f, Point, Point2d)  2D point  defined by x, y coordinates  Point first(2, 3);  Size_ (Size, Size2f)  2D size structure  specify the size (width and height) of an image or rectangle  Rect  2D rectangle object 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 9
  • 10.
    Image I/O  Image I/O  imread  legge un’immagine da file e lo salva in un oggetto di tipo Mat Mat imread(const string& filename, int flags=1)  imwrite  salva un’immagine su file bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>())  imshow  mostra un’immagine a schermo (in una finestra creata precedentemente) void imshow(const string& winname, InputArray mat) 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 10
  • 11.
    Drawing operations  Base drawing operations  circle  draws a simple or filled circle with a given center and radius on a given image  line  draws a line between two point in the given image  ellipse  draws an ellipse outline, a filled ellipse, an elliptic arc, a filled ellipse sector, …  rectangle  draws a rectangle outline or a filled rectangle  note that negative thickness will fill the rectangle 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 11
  • 12.
    Color spaces  Converting color spaces  cvtColor  converts an input image from one color space to another  examples:  cvtColor(src, dest, CV_RGB2GRAY);  cvtColor(src, dest, CV_HSV2BGR);  cvtColor(src, dest, CV_RGB2BGR);  important, since images in OpenCV uses BGR instead of RGB 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 12
  • 13.
    How we canuse OpenCV?  LABINF:  already installed under Windows  version 2.3.1  Qt Creator (4.7.4) is the IDE to be used  At home:  feel free to install OpenCV version 2.4.3  it should be more “stable”  you can use whatever IDE you like  but we give full support only for Qt Creator  Installation:  see the next set of slides for a step-by-step guide 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 13
  • 14.
    What if Igot problems?  Small problems  drop me a line Problems with Qt and a gray scale image  luigi.derussis@polito.it Awesome student to me  Normal problems Hi, […] I’m using “cvtColor(image, gray, CV_BGR2GRAY);” and Indexed8 to convert an image in gray scale but the image is not shown in Qt…  come to office hours Can you help me? Regards, …  every Tuesday, 9:00 - 11:00  LAB6, second floor of DAUIN  please send an e-mail beforehand  Enormous problems  come to the dedicated lessons  Tuesday 30th October, 9:30-12:30, DAUIN  Thursday 8th November, 15:00-18:00, DAUIN 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 14
  • 15.
    What if Igot problems? OpenCV installation  Small problems Not-So-Awesome student to me  drop me a line Hi, […] I followed the guide for installing OpenCV on my Mac but I have an error after step 3. Can we meet on next Tuesday to solve the problem?  luigi.derussis@polito.it Thanks! Regards,  Normal problems …  come to office hours  every Tuesday, 9:00 - 11:00  LAB6, second floor of DAUIN  please send an e-mail beforehand  Enormous problems  come to the dedicated lessons  Tuesday 30th October, 9:30-12:30, DAUIN  Thursday 8th November, 15:00-18:00, DAUIN 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 15
  • 16.
    What if Igot problems?  Small problems  drop me a line  luigi.derussis@polito.it  Normal problems Help with OpenCV  come to office hours Good student to me Hi,  every Tuesday, 9:00 - 11:00 […] I see the solution of Exercise 2.1 but I don’t understand the following expressions: - main(); - int* number;  LAB6, second floor of DAUIN - &timer. Can you explain to me what they are?  please send an e-mail beforehand Regards, …  Enormous problems  come to the dedicated lessons  Tuesday 30th October, 9:30-12:30, DAUIN  Thursday 8th November, 15:00-18:00, DAUIN 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 16
  • 17.
    An mail notto be sent!!! 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 17
  • 18.
    Resources  OpenCV Wiki  http://code.opencv.org/projects/opencv/wiki  OpenCV 2.x Official Documentation  http://docs.opencv.org/  User Q&A forum  http://answers.opencv.org/questions/  OpenCV 2.x Tutorials  http://docs.opencv.org/opencv_tutorials.pdf  Books:  Robert Laganière, OpenCV 2 Computer Vision Application Programming Cookbook, Packt Publishing, ISBN 978-1849513241  Gary Bradsky, Adrian Kaehler, Learning OpenCV: Computer Vision in C++ with the OpenCV Library, O'Reilly Media, ISBN 978-1449314651 (to be published) 10/26/2012 Luigi De Russis - Computer Vision - OpenCV 18
  • 19.
    License Thiswork 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. 26/10/2012 Luigi De Russis - Computer Vision - OpenCV 19