【1】代码
int FaceDetect(string path) {
cv::Mat image = cv::imread(path);
if (image.empty()) {
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
cv::CascadeClassifier face_cascade;
if (!face_cascade.load(cv::samples::findFile("haarcascade_frontalface_alt.xml"))) //xml的绝对路径
{
std::cout << "Error loading face cascade" << std::endl;
return -1;
}
std::vector<cv::Rect> faces;
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
cv::equalizeHist(gray, gray);
face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));
for (size_t i = 0; i < faces.size(); i++) {
cv::rectangle(image, faces[i], cv::Scalar(255, 0, 0), 2);
}
cv::imshow("Face Detection", image);
cv::waitKey(0);
}
【2】haarcascade_frontalface_alt.xml

Haar分类器实际上是Boosting算法的一个应用,Haar分类器用到了Boosting算法中的AdaBoost算法,只是把AdaBoost算法训练出的强分类器进行了级联,并且在底层的特征提取中采用了高效率的矩形特征和积分图方法