Path: blob/master/samples/cpp/dbt_face_detection.cpp
16337 views
#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID) || (defined(_MSC_VER) && _MSC_VER>=1800)12#include <opencv2/imgproc.hpp> // Gaussian Blur3#include <opencv2/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)4#include <opencv2/videoio.hpp>5#include <opencv2/highgui.hpp> // OpenCV window I/O6#include <opencv2/features2d.hpp>7#include <opencv2/objdetect.hpp>89#include <stdio.h>1011using namespace std;12using namespace cv;1314const string WindowName = "Face Detection example";1516class CascadeDetectorAdapter: public DetectionBasedTracker::IDetector17{18public:19CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector):20IDetector(),21Detector(detector)22{23CV_Assert(detector);24}2526void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects) CV_OVERRIDE27{28Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize);29}3031virtual ~CascadeDetectorAdapter() CV_OVERRIDE32{}3334private:35CascadeDetectorAdapter();36cv::Ptr<cv::CascadeClassifier> Detector;37};3839int main(int , char** )40{41namedWindow(WindowName);4243VideoCapture VideoStream(0);4445if (!VideoStream.isOpened())46{47printf("Error: Cannot open video stream from camera\n");48return 1;49}5051std::string cascadeFrontalfilename = "../../data/lbpcascades/lbpcascade_frontalface.xml";52cv::Ptr<cv::CascadeClassifier> cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);53cv::Ptr<DetectionBasedTracker::IDetector> MainDetector = makePtr<CascadeDetectorAdapter>(cascade);54if ( cascade->empty() )55{56printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str());57return 2;58}5960cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);61cv::Ptr<DetectionBasedTracker::IDetector> TrackingDetector = makePtr<CascadeDetectorAdapter>(cascade);62if ( cascade->empty() )63{64printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str());65return 2;66}6768DetectionBasedTracker::Parameters params;69DetectionBasedTracker Detector(MainDetector, TrackingDetector, params);7071if (!Detector.run())72{73printf("Error: Detector initialization failed\n");74return 2;75}7677Mat ReferenceFrame;78Mat GrayFrame;79vector<Rect> Faces;8081do82{83VideoStream >> ReferenceFrame;84cvtColor(ReferenceFrame, GrayFrame, COLOR_BGR2GRAY);85Detector.process(GrayFrame);86Detector.getObjects(Faces);8788for (size_t i = 0; i < Faces.size(); i++)89{90rectangle(ReferenceFrame, Faces[i], Scalar(0,255,0));91}9293imshow(WindowName, ReferenceFrame);94} while (waitKey(30) < 0);9596Detector.stop();9798return 0;99}100101#else102103#include <stdio.h>104int main()105{106printf("This sample works for UNIX or ANDROID or Visual Studio 2013+ only\n");107return 0;108}109110#endif111112113