using VideoCapture instead of CvCapture* in cascade tutorial
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
This commit is contained in:
		@@ -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 "opencv2/objdetect.hpp"
 | 
			
		||||
    #include "opencv2/highgui.hpp"
 | 
			
		||||
    #include "opencv2/imgproc.hpp"
 | 
			
		||||
 | 
			
		||||
   #include <iostream>
 | 
			
		||||
   #include <stdio.h>
 | 
			
		||||
    #include <iostream>
 | 
			
		||||
    #include <stdio.h>
 | 
			
		||||
 | 
			
		||||
   using namespace std;
 | 
			
		||||
   using namespace cv;
 | 
			
		||||
    using namespace std;
 | 
			
		||||
    using namespace cv;
 | 
			
		||||
 | 
			
		||||
   /** Function Headers */
 | 
			
		||||
   void detectAndDisplay( Mat frame );
 | 
			
		||||
    /** 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);
 | 
			
		||||
    /** 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";
 | 
			
		||||
 | 
			
		||||
   /** @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;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
  /** @function detectAndDisplay */
 | 
			
		||||
  void detectAndDisplay( Mat frame )
 | 
			
		||||
  {
 | 
			
		||||
    std::vector<Rect> faces;
 | 
			
		||||
    Mat frame_gray;
 | 
			
		||||
 | 
			
		||||
    cvtColor( frame, frame_gray, CV_BGR2GRAY );
 | 
			
		||||
    equalizeHist( frame_gray, frame_gray );
 | 
			
		||||
 | 
			
		||||
    //-- Detect faces
 | 
			
		||||
    face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
 | 
			
		||||
 | 
			
		||||
    for( int i = 0; i < faces.size(); i++ )
 | 
			
		||||
    /** @function main */
 | 
			
		||||
    int main( void )
 | 
			
		||||
    {
 | 
			
		||||
      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 );
 | 
			
		||||
        VideoCapture capture;
 | 
			
		||||
        Mat frame;
 | 
			
		||||
 | 
			
		||||
      Mat faceROI = frame_gray( faces[i] );
 | 
			
		||||
      std::vector<Rect> eyes;
 | 
			
		||||
        //-- 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; };
 | 
			
		||||
 | 
			
		||||
      //-- In each face, detect eyes
 | 
			
		||||
      eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );
 | 
			
		||||
        //-- 2. Read the video stream
 | 
			
		||||
        capture.open( -1 );
 | 
			
		||||
        if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
 | 
			
		||||
 | 
			
		||||
      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 );
 | 
			
		||||
       }
 | 
			
		||||
        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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @function detectAndDisplay */
 | 
			
		||||
    void detectAndDisplay( Mat frame )
 | 
			
		||||
    {
 | 
			
		||||
        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) );
 | 
			
		||||
 | 
			
		||||
        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 );
 | 
			
		||||
 | 
			
		||||
            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) );
 | 
			
		||||
 | 
			
		||||
            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
 | 
			
		||||
============
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    VideoCapture 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; };
 | 
			
		||||
    //-- 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 = cvCaptureFromCAM( -1 );
 | 
			
		||||
  if( capture )
 | 
			
		||||
  {
 | 
			
		||||
    for(;;)
 | 
			
		||||
    //-- 2. Read the video stream
 | 
			
		||||
    capture.open( -1 );
 | 
			
		||||
    if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
 | 
			
		||||
 | 
			
		||||
    while ( capture.read(frame) )
 | 
			
		||||
    {
 | 
			
		||||
      frame = cv::cvarrToMat(cvQueryFrame( capture ));
 | 
			
		||||
        if( frame.empty() )
 | 
			
		||||
        {
 | 
			
		||||
            printf(" --(!) No captured frame -- Break!");
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      //-- 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; }
 | 
			
		||||
        //-- 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 );
 | 
			
		||||
   //-- Detect faces
 | 
			
		||||
   face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
 | 
			
		||||
    cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
 | 
			
		||||
    equalizeHist( frame_gray, frame_gray );
 | 
			
		||||
 | 
			
		||||
   for( size_t i = 0; i < faces.size(); i++ )
 | 
			
		||||
    //-- 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++ )
 | 
			
		||||
    {
 | 
			
		||||
      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 );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    VideoCapture 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; };
 | 
			
		||||
    //-- 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; };
 | 
			
		||||
 | 
			
		||||
  //-- 2. Read the video stream
 | 
			
		||||
  capture = cvCaptureFromCAM( -1 );
 | 
			
		||||
  if( capture )
 | 
			
		||||
  {
 | 
			
		||||
    for(;;)
 | 
			
		||||
    //-- 2. Read the video stream
 | 
			
		||||
    capture.open( -1 );
 | 
			
		||||
    if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
 | 
			
		||||
 | 
			
		||||
    while ( capture.read(frame) )
 | 
			
		||||
    {
 | 
			
		||||
      frame = cv::cvarrToMat(cvQueryFrame( capture ));
 | 
			
		||||
        if( frame.empty() )
 | 
			
		||||
        {
 | 
			
		||||
            printf(" --(!) No captured frame -- Break!");
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      //-- 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; }
 | 
			
		||||
        //-- 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;
 | 
			
		||||
        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 );
 | 
			
		||||
        //-- 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 );
 | 
			
		||||
          }
 | 
			
		||||
       }
 | 
			
		||||
            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 );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user