Advertisement
Ludwiq

Untitled

Dec 14th, 2016
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. #include "opencv2/objdetect.hpp"
  2. #include "opencv2/videoio.hpp"
  3. #include "opencv2/highgui.hpp"
  4. #include "opencv2/imgproc.hpp"
  5.  
  6. #include <iostream>
  7. #include <stdio.h>
  8.  
  9. using namespace std;
  10. using namespace cv;
  11.  
  12. /** Function Headers */
  13. void detectAndDisplay(Mat frame);
  14.  
  15. /** Global variables */
  16. String face_cascade_name = "data/haarcascade_frontalface_alt.xml";
  17. String eyes_cascade_name = "data/haarcascade_eye_tree_eyeglasses.xml";
  18. CascadeClassifier face_cascade;
  19. CascadeClassifier eyes_cascade;
  20. String window_name = "Capture - Face detection";
  21. String window_frame_gray = "Frame gray";
  22. String window_face_roi = "Face ROI";
  23.  
  24. /** @function main */
  25. int main(void)
  26. {
  27.     VideoCapture capture(0);
  28.     Mat frame;
  29.  
  30.     //-- 1. Load the cascades
  31.     if (!face_cascade.load(face_cascade_name)) { printf("--(!)Error loading face cascade\n"); return -1; };
  32.     if (!eyes_cascade.load(eyes_cascade_name)) { printf("--(!)Error loading eyes cascade\n"); return -1; };
  33.  
  34.     //-- 2. Read the video stream
  35.     if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }
  36.  
  37.     while (capture.read(frame))
  38.     {
  39.         if (frame.empty())
  40.         {
  41.             printf(" --(!) No captured frame -- Break!");
  42.             break;
  43.         }
  44.  
  45.         //-- 3. Apply the classifier to the frame
  46.         detectAndDisplay(frame);
  47.  
  48.         int c = waitKey(10);
  49.         if ((char)c == 27) { break; } // escape
  50.     }
  51.     return 0;
  52. }
  53.  
  54. /** @function detectAndDisplay */
  55. void detectAndDisplay(Mat frame)
  56. {
  57.     std::vector<Rect> faces;
  58.     Mat frame_gray;
  59.  
  60.     cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
  61.     //imshow(window_name, frame);
  62.     equalizeHist(frame_gray, frame_gray);
  63.     //imshow(window_frame_gray, frame_gray);
  64.  
  65.     //-- Detect faces
  66.     face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
  67.  
  68.     for (size_t i = 0; i < faces.size(); i++)
  69.     {
  70.         Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);
  71.         ellipse(frame, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
  72.  
  73.         Mat faceROI = frame_gray(faces[i]);
  74.         //imshow(window_face_roi, faceROI);
  75.         std::vector<Rect> eyes;
  76.  
  77.         //-- In each face, detect eyes
  78.         try {
  79.             eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
  80.         }
  81.         catch (const std::exception& ex) {
  82.             cout << "--(!)Error: " << ex.what();
  83.         }
  84.        
  85.  
  86.         for (size_t j = 0; j < eyes.size(); j++)
  87.         {
  88.             Point eye_center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);
  89.             int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
  90.             circle(frame, eye_center, radius, Scalar(255, 0, 0), 4, 8, 0);
  91.         }
  92.     }
  93.     //-- Show what you got
  94.     imshow(window_name, frame);
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement