using VideoCapture instead of CvCapture* in cascade tutorial
authorberak <p4p4p4@web.de>
Tue, 20 Aug 2013 08:56:57 +0000 (10:56 +0200)
committerberak <p4p4p4@web.de>
Thu, 22 Aug 2013 15:38:59 +0000 (17:38 +0200)
corrected constants,  changed objdetection.cpp as well

updated objDetection2.cpp as well

fixed headers in objdetection2.cpp

removed useles RNG

fixed buildbot warnings (wow, i like that bot!)

victim of the war on whitespace

fixing buildbot warnings

fixing last buildbot warning, heya .

trying to rebase/squash commits

doc/tutorials/objdetect/cascade_classifier/cascade_classifier.rst
samples/cpp/tutorial_code/objectDetection/objectDetection.cpp
samples/cpp/tutorial_code/objectDetection/objectDetection2.cpp

index 146a0ec..fd0fc09 100644 (file)
@@ -26,91 +26,90 @@ This tutorial code's is shown lines below. You can also download it from `here <
 
 .. code-block:: cpp
 
-   #include "opencv2/objdetect.hpp"
-   #include "opencv2/highgui.hpp"
-   #include "opencv2/imgproc.hpp"
-
-   #include <iostream>
-   #include <stdio.h>
-
-   using namespace std;
-   using namespace cv;
-
-   /** Function Headers */
-   void detectAndDisplay( Mat frame );
-
-   /** Global variables */
-   String face_cascade_name = "haarcascade_frontalface_alt.xml";
-   String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
-   CascadeClassifier face_cascade;
-   CascadeClassifier eyes_cascade;
-   string window_name = "Capture - Face detection";
-   RNG rng(12345);
-
-   /** @function main */
-   int main( int argc, const char** argv )
-   {
-     CvCapture* capture;
-     Mat frame;
-
-     //-- 1. Load the cascades
-     if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
-     if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
-
-     //-- 2. Read the video stream
-     capture = cvCaptureFromCAM( -1 );
-     if( capture )
-     {
-       while( true )
-       {
-     frame = cvQueryFrame( capture );
-
-     //-- 3. Apply the classifier to the frame
-         if( !frame.empty() )
-         { detectAndDisplay( frame ); }
-         else
-         { printf(" --(!) No captured frame -- Break!"); break; }
-
-         int c = waitKey(10);
-         if( (char)c == 'c' ) { break; }
-        }
-     }
-     return 0;
-   }
+    #include "opencv2/objdetect.hpp"
+    #include "opencv2/highgui.hpp"
+    #include "opencv2/imgproc.hpp"
+
+    #include <iostream>
+    #include <stdio.h>
+
+    using namespace std;
+    using namespace cv;
 
-  /** @function detectAndDisplay */
-  void detectAndDisplay( Mat frame )
-  {
-    std::vector<Rect> faces;
-    Mat frame_gray;
+    /** Function Headers */
+    void detectAndDisplay( Mat frame );
 
-    cvtColor( frame, frame_gray, CV_BGR2GRAY );
-    equalizeHist( frame_gray, frame_gray );
+    /** Global variables */
+    String face_cascade_name = "haarcascade_frontalface_alt.xml";
+    String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
+    CascadeClassifier face_cascade;
+    CascadeClassifier eyes_cascade;
+    String window_name = "Capture - Face detection";
 
-    //-- Detect faces
-    face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
+    /** @function main */
+    int main( void )
+    {
+        VideoCapture capture;
+        Mat frame;
+
+        //-- 1. Load the cascades
+        if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading face cascade\n"); return -1; };
+        if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading eyes cascade\n"); return -1; };
+
+        //-- 2. Read the video stream
+        capture.open( -1 );
+        if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
+
+        while (  capture.read(frame) )
+        {
+            if( frame.empty() )
+            {
+                printf(" --(!) No captured frame -- Break!");
+                break;
+            }
+
+            //-- 3. Apply the classifier to the frame
+            detectAndDisplay( frame );
+
+            int c = waitKey(10);
+            if( (char)c == 27 ) { break; } // escape
+        }
+        return 0;
+    }
 
-    for( int i = 0; i < faces.size(); i++ )
+    /** @function detectAndDisplay */
+    void detectAndDisplay( Mat frame )
     {
-      Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
-      ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
+        std::vector<Rect> faces;
+        Mat frame_gray;
+
+        cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
+        equalizeHist( frame_gray, frame_gray );
+
+        //-- Detect faces
+        face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
 
-      Mat faceROI = frame_gray( faces[i] );
-      std::vector<Rect> eyes;
+        for( size_t i = 0; i < faces.size(); i++ )
+        {
+            Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 );
+            ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
 
-      //-- In each face, detect eyes
-      eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );
+            Mat faceROI = frame_gray( faces[i] );
+            std::vector<Rect> eyes;
 
-      for( int j = 0; j < eyes.size(); j++ )
-       {
-         Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
-         int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
-         circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
-       }
+            //-- In each face, detect eyes
+            eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );
+
+            for( size_t j = 0; j < eyes.size(); j++ )
+            {
+                Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2 );
+                int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
+                circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
+            }
+        }
+        //-- Show what you got
+        imshow( window_name, frame );
     }
-    //-- Show what you got
-    imshow( window_name, frame );
-   }
 
 Explanation
 ============
index 2f1575e..0d109f4 100644 (file)
@@ -1,14 +1,6 @@
-/**
- * @file objectDetection.cpp
- * @author A. Huaman ( based in the classic facedetect.cpp in samples/c )
- * @brief A simplified version of facedetect.cpp, show how to load a cascade classifier and how to find objects (Face + eyes) in a video stream
- */
-#include "opencv2/objdetect/objdetect.hpp"
-#include "opencv2/highgui/highgui.hpp"
-#include "opencv2/imgproc/imgproc.hpp"
-#include "opencv2/core/utility.hpp"
-
-#include "opencv2/highgui/highgui_c.h"
+#include "opencv2/objdetect.hpp"
+#include "opencv2/highgui.hpp"
+#include "opencv2/imgproc.hpp"
 
 #include <iostream>
 #include <stdio.h>
@@ -20,79 +12,73 @@ using namespace cv;
 void detectAndDisplay( Mat frame );
 
 /** Global variables */
-//-- Note, either copy these two files from opencv/data/haarscascades to your current folder, or change these locations
-string face_cascade_name = "haarcascade_frontalface_alt.xml";
-string eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
+String face_cascade_name = "haarcascade_frontalface_alt.xml";
+String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
 CascadeClassifier face_cascade;
 CascadeClassifier eyes_cascade;
-string window_name = "Capture - Face detection";
-RNG rng(12345);
+String window_name = "Capture - Face detection";
 
-/**
- * @function main
- */
+/** @function main */
 int main( void )
 {
-  CvCapture* capture;
-  Mat frame;
-
-  //-- 1. Load the cascades
-  if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
-  if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
-
-  //-- 2. Read the video stream
-  capture = cvCaptureFromCAM( -1 );
-  if( capture )
-  {
-    for(;;)
-    {
-      frame = cv::cvarrToMat(cvQueryFrame( capture ));
+    VideoCapture capture;
+    Mat frame;
+
+    //-- 1. Load the cascades
+    if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading face cascade\n"); return -1; };
+    if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading eyes cascade\n"); return -1; };
 
-      //-- 3. Apply the classifier to the frame
-      if( !frame.empty() )
-       { detectAndDisplay( frame ); }
-      else
-       { printf(" --(!) No captured frame -- Break!"); break; }
+    //-- 2. Read the video stream
+    capture.open( -1 );
+    if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
 
-      int c = waitKey(10);
-      if( (char)c == 'c' ) { break; }
+    while ( capture.read(frame) )
+    {
+        if( frame.empty() )
+        {
+            printf(" --(!) No captured frame -- Break!");
+            break;
+        }
 
+        //-- 3. Apply the classifier to the frame
+        detectAndDisplay( frame );
+
+        int c = waitKey(10);
+        if( (char)c == 27 ) { break; } // escape
     }
-  }
-  return 0;
+    return 0;
 }
 
-/**
- * @function detectAndDisplay
- */
+/** @function detectAndDisplay */
 void detectAndDisplay( Mat frame )
 {
-   std::vector<Rect> faces;
-   Mat frame_gray;
+    std::vector<Rect> faces;
+    Mat frame_gray;
+
+    cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
+    equalizeHist( frame_gray, frame_gray );
 
-   cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
-   equalizeHist( frame_gray, frame_gray );
-   //-- Detect faces
-   face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
+    //-- Detect faces
+    face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
 
-   for( size_t i = 0; i < faces.size(); i++ )
+    for ( size_t i = 0; i < faces.size(); i++ )
     {
-      Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 );
-      ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2), 0, 0, 360, Scalar( 255, 0, 255 ), 2, 8, 0 );
+        Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 );
+        ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
 
-      Mat faceROI = frame_gray( faces[i] );
-      std::vector<Rect> eyes;
+        Mat faceROI = frame_gray( faces[i] );
+        std::vector<Rect> eyes;
 
-      //-- In each face, detect eyes
-      eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );
+        //-- In each face, detect eyes
+        eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );
 
-      for( size_t j = 0; j < eyes.size(); j++ )
-       {
-         Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2 );
-         int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
-         circle( frame, eye_center, radius, Scalar( 255, 0, 0 ), 3, 8, 0 );
-       }
+        for ( size_t j = 0; j < eyes.size(); j++ )
+        {
+            Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2 );
+            int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
+            circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
+        }
     }
-   //-- Show what you got
-   imshow( window_name, frame );
+    //-- Show what you got
+    imshow( window_name, frame );
 }
index 0cd2196..c59a248 100644 (file)
@@ -3,12 +3,9 @@
  * @author A. Huaman ( based in the classic facedetect.cpp in samples/c )
  * @brief A simplified version of facedetect.cpp, show how to load a cascade classifier and how to find objects (Face + eyes) in a video stream - Using LBP here
  */
-#include "opencv2/objdetect/objdetect.hpp"
-#include "opencv2/highgui/highgui.hpp"
-#include "opencv2/imgproc/imgproc.hpp"
-#include "opencv2/core/utility.hpp"
-
-#include "opencv2/highgui/highgui_c.h"
+#include "opencv2/objdetect.hpp"
+#include "opencv2/highgui.hpp"
+#include "opencv2/imgproc.hpp"
 
 #include <iostream>
 #include <stdio.h>
@@ -20,46 +17,43 @@ using namespace cv;
 void detectAndDisplay( Mat frame );
 
 /** Global variables */
-string face_cascade_name = "lbpcascade_frontalface.xml";
-string eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
+String face_cascade_name = "lbpcascade_frontalface.xml";
+String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
 CascadeClassifier face_cascade;
 CascadeClassifier eyes_cascade;
-string window_name = "Capture - Face detection";
-
-RNG rng(12345);
-
+String window_name = "Capture - Face detection";
 /**
  * @function main
  */
 int main( void )
 {
-  CvCapture* capture;
-  Mat frame;
-
-  //-- 1. Load the cascade
-  if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
-  if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
-
-  //-- 2. Read the video stream
-  capture = cvCaptureFromCAM( -1 );
-  if( capture )
-  {
-    for(;;)
-    {
-      frame = cv::cvarrToMat(cvQueryFrame( capture ));
+    VideoCapture capture;
+    Mat frame;
 
-      //-- 3. Apply the classifier to the frame
-      if( !frame.empty() )
-       { detectAndDisplay( frame ); }
-      else
-       { printf(" --(!) No captured frame -- Break!"); break; }
+    //-- 1. Load the cascade
+    if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading face cascade\n"); return -1; };
+    if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading eyes cascade\n"); return -1; };
 
-      int c = waitKey(10);
-      if( (char)c == 'c' ) { break; }
+    //-- 2. Read the video stream
+    capture.open( -1 );
+    if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
 
+    while ( capture.read(frame) )
+    {
+        if( frame.empty() )
+        {
+            printf(" --(!) No captured frame -- Break!");
+            break;
+        }
+
+        //-- 3. Apply the classifier to the frame
+        detectAndDisplay( frame );
+
+        //-- bail out if escape was pressed
+        int c = waitKey(10);
+        if( (char)c == 27 ) { break; }
     }
-  }
-  return 0;
+    return 0;
 }
 
 /**
@@ -67,37 +61,37 @@ int main( void )
  */
 void detectAndDisplay( Mat frame )
 {
-   std::vector<Rect> faces;
-   Mat frame_gray;
+    std::vector<Rect> faces;
+    Mat frame_gray;
 
-   cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
-   equalizeHist( frame_gray, frame_gray );
+    cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
+    equalizeHist( frame_gray, frame_gray );
 
-   //-- Detect faces
-   face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0, Size(80, 80) );
+    //-- Detect faces
+    face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0, Size(80, 80) );
 
-   for( size_t i = 0; i < faces.size(); i++ )
+    for( size_t i = 0; i < faces.size(); i++ )
     {
-      Mat faceROI = frame_gray( faces[i] );
-      std::vector<Rect> eyes;
-
-      //-- In each face, detect eyes
-      eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );
-      if( eyes.size() == 2)
-      {
-         //-- Draw the face
-         Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 );
-         ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2), 0, 0, 360, Scalar( 255, 0, 0 ), 2, 8, 0 );
-
-         for( size_t j = 0; j < eyes.size(); j++ )
-          { //-- Draw the eyes
-            Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2 );
-            int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
-            circle( frame, eye_center, radius, Scalar( 255, 0, 255 ), 3, 8, 0 );
-          }
-       }
+        Mat faceROI = frame_gray( faces[i] );
+        std::vector<Rect> eyes;
+
+        //-- In each face, detect eyes
+        eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );
+        if( eyes.size() == 2)
+        {
+            //-- Draw the face
+            Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 );
+            ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2), 0, 0, 360, Scalar( 255, 0, 0 ), 2, 8, 0 );
+
+            for( size_t j = 0; j < eyes.size(); j++ )
+            { //-- Draw the eyes
+                Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2 );
+                int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
+                circle( frame, eye_center, radius, Scalar( 255, 0, 255 ), 3, 8, 0 );
+            }
+        }
 
     }
-   //-- Show what you got
-   imshow( window_name, frame );
+    //-- Show what you got
+    imshow( window_name, frame );
 }