#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/calib3d/calib3d.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat image, image_gray;
image = imread("D:\\PIC\\FACE.png");
imshow("原图", image);
cvtColor(image, image_gray, COLOR_BGR2GRAY);//转为灰度图
equalizeHist(image_gray, image_gray); //
CascadeClassifier face_cascade;
face_cascade.load("D:\\OPENCV\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
std::vector<Rect> faces;
face_cascade.detectMultiScale(image, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
for (int i = 0; i < faces.size(); i++)
{
Point center(faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].height * 0.5);
cout << "initial x: " << faces[i].x << " initial y: " << faces[i].y << endl;
cout << "center x: " << faces[i].x + faces[i].width * 0.5 << " center y: " << faces[i].y + faces[i].height * 0.5<< endl;
ellipse(image, center, Size(faces[i].width * 0.5, faces[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
rectangle(image, faces[i], Scalar(0, 0, 255));
}
imshow("Detected Face", image);
waitKey(0);
}
faces[i] 是一个矩形
faces[i].x是这个矩形的左上角x像素坐标
faces[i].y是这个矩形左上角y像素坐标
读取图像,创建CascadeClassifier, 然后用CascadeClassifier::load加载训练好的XML文件,再用 CascadeClassifier::detectMultiScale识别人脸