Advertisement
Guest User

Untitled

a guest
Jul 4th, 2015
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 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. #include "opencv2/opencv.hpp"
  6.  
  7. #include <iostream>
  8. #include <stdio.h>
  9.  
  10. using namespace std;
  11. using namespace cv;
  12.  
  13. /** Function Headers */
  14. void detectAndDisplay(Mat frame);
  15.  
  16. /** Global variables */
  17. String face_cascade_name = "haarcascade_frontalface_alt.xml";
  18. String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
  19. CascadeClassifier face_cascade;
  20. CascadeClassifier eyes_cascade;
  21. String window_name = "Capture - Face detection";
  22.  
  23. /** @function main */
  24. int main(void)
  25. {
  26. VideoCapture capture;
  27. Mat frame;
  28.  
  29. //-- 1. Load the cascades
  30. if (!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading face cascaden"); return -1; };
  31. if (!eyes_cascade.load(eyes_cascade_name)){ printf("--(!)Error loading eyes cascaden"); return -1; };
  32.  
  33. //-- 2. Read the video stream
  34. capture.open(-1);
  35. if (!capture.isOpened()) { printf("--(!)Error opening video capturen"); 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. equalizeHist(frame_gray, frame_gray);
  62.  
  63. //-- Detect faces
  64. face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
  65.  
  66. for (size_t i = 0; i < faces.size(); i++)
  67. {
  68. Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);
  69. ellipse(frame, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
  70.  
  71. Mat faceROI = frame_gray(faces[i]);
  72. std::vector<Rect> eyes;
  73.  
  74. //-- In each face, detect eyes
  75. eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
  76.  
  77. for (size_t j = 0; j < eyes.size(); j++)
  78. {
  79. Point eye_center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);
  80. int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
  81. circle(frame, eye_center, radius, Scalar(255, 0, 0), 4, 8, 0);
  82. }
  83. }
  84. //-- Show what you got
  85. imshow(window_name, frame);
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement