#include "FaceDetector.h" /* Author: Pierfrancesco Soffritti https://github.com/PierfrancescoSoffritti */ namespace computervision { Rect getFaceRect(Mat input); String faceClassifierFileName = "res/haarcascade_frontalface_alt.xml"; CascadeClassifier faceCascadeClassifier; FaceDetector::FaceDetector(void) { if (!faceCascadeClassifier.load(faceClassifierFileName)) throw runtime_error("can't load file " + faceClassifierFileName); } void FaceDetector::removeFaces(Mat input, Mat output) { vector faces; Mat frameGray; cvtColor(input, frameGray, CV_BGR2GRAY); equalizeHist(frameGray, frameGray); faceCascadeClassifier.detectMultiScale(frameGray, faces, 1.1, 2, 0 | 2, Size(120, 120)); // HAAR_SCALE_IMAGE is 2 for (size_t i = 0; i < faces.size(); i++) { rectangle( output, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), Scalar(0, 0, 0), -1 ); } } Rect getFaceRect(Mat input) { vector faceRectangles; Mat inputGray; cvtColor(input, inputGray, CV_BGR2GRAY); equalizeHist(inputGray, inputGray); faceCascadeClassifier.detectMultiScale(inputGray, faceRectangles, 1.1, 2, 0 | 2, Size(120, 120)); // HAAR_SCALE_IMAGE is 2 if (faceRectangles.size() > 0) return faceRectangles[0]; else return Rect(0, 0, 1, 1); } }