zoukankan      html  css  js  c++  java
  • opencv 检测人脸、人眼

    This tutorial code’s is shown lines below. You can also download it from here . The second version (using LBP for face detection) can be found here

     #include "opencv2/objdetect/objdetect.hpp"
     #include "opencv2/highgui/highgui.hpp"
     #include "opencv2/imgproc/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
    "); return -1; };
       if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading
    "); 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( size_t i = 0; i < faces.size(); i++ )
      {
        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 );
    
        Mat faceROI = frame_gray( faces[i] );
        std::vector<Rect> eyes;
    
        //-- In each face, detect eyes
        eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );
    
        for( size_t 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 );
         }
      }
      //-- Show what you got
      imshow( window_name, frame );
     }

    Explanation

    Result

    1. Here is the result of running the code above and using as input the video stream of a build-in webcam:

      ../../../../_images/Cascade_Classifier_Tutorial_Result_Haar.jpg

      Remember to copy the files haarcascade_frontalface_alt.xml and haarcascade_eye_tree_eyeglasses.xml in your current directory. They are located in opencv/data/haarcascades

    2. This is the result of using the file lbpcascade_frontalface.xml (LBP trained) for the face detection. For the eyes we keep using the file used in the tutorial.

    3.  
     
  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/Ph-one/p/11641768.html
Copyright © 2011-2022 走看看