1 #if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID)
3 #include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur
4 #include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
5 #include <opencv2/highgui/highgui.hpp> // OpenCV window I/O
6 #include <opencv2/features2d/features2d.hpp>
7 #include <opencv2/contrib/detection_based_tracker.hpp>
16 const string WindowName = "Face Detection example";
18 class CascadeDetectorAdapter: public DetectionBasedTracker::IDetector
21 CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector):
28 void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects)
30 Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize);
33 virtual ~CascadeDetectorAdapter()
37 CascadeDetectorAdapter();
38 cv::Ptr<cv::CascadeClassifier> Detector;
41 int main(int , char** )
43 namedWindow(WindowName);
45 VideoCapture VideoStream(0);
47 if (!VideoStream.isOpened())
49 printf("Error: Cannot open video stream from camera\n");
53 std::string cascadeFrontalfilename = "../../data/lbpcascades/lbpcascade_frontalface.xml";
54 cv::Ptr<cv::CascadeClassifier> cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);
55 cv::Ptr<DetectionBasedTracker::IDetector> MainDetector = makePtr<CascadeDetectorAdapter>(cascade);
57 cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);
58 cv::Ptr<DetectionBasedTracker::IDetector> TrackingDetector = makePtr<CascadeDetectorAdapter>(cascade);
60 DetectionBasedTracker::Parameters params;
61 DetectionBasedTracker Detector(MainDetector, TrackingDetector, params);
65 printf("Error: Detector initialization failed\n");
75 VideoStream >> ReferenceFrame;
76 cvtColor(ReferenceFrame, GrayFrame, COLOR_RGB2GRAY);
77 Detector.process(GrayFrame);
78 Detector.getObjects(Faces);
80 for (size_t i = 0; i < Faces.size(); i++)
82 rectangle(ReferenceFrame, Faces[i], Scalar(0,255,0));
85 imshow(WindowName, ReferenceFrame);
87 if (waitKey(30) >= 0) break;
100 printf("This sample works for UNIX or ANDROID only\n");