OpenCv 人脸识别 基础
1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 using namespace std; 4 5 int main() { 6 // 摄像头 7 cv::VideoCapture vc(0); 8 9 // 人脸分类器 10 const char* filename = "D:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml"; 11 cv::CascadeClassifier face_cascade; 12 // 加载人脸分类器 13 if (!face_cascade.load(filename)) { 14 return -1; 15 } 16 17 // 用来检测的图为原图的大小比例 18 float scale = 0.3f; 19 // 图 20 cv::Mat mat, mat2; 21 // 检测得到的人脸的结果 22 vector<cv::Rect> faces_result; 23 24 while (true) { 25 if (vc.isOpened()) { 26 if (vc.retrieve(mat)) { 27 // 将原图像水平反转(这样更符合人的习惯) 28 cv::flip(mat, mat, 1); 29 // 缩小 30 cv::resize(mat, mat2, cv::Size(mat.cols * scale, mat.rows * scale)); 31 // 变灰 32 cv::cvtColor(mat2, mat2, CV_BGR2GRAY); 33 cv::equalizeHist(mat2, mat2); 34 35 //////////// 开始检测人脸 //////////// 36 face_cascade.detectMultiScale(mat2, faces_result); 37 38 // 将结果显示在原图上 39 for (auto face : faces_result) { 40 cv::Point center(face.x / scale + face.width / 2 / scale, face.y / scale + face.height / 2 / scale); 41 cv::ellipse(mat, center, cv::Size(face.width / 2 / scale, face.height / 2 / scale), 0, 0, 360, cv::Scalar(0, 0, 255), 2, 8, 0); 42 } 43 44 // 显示出来 45 cv::imshow("My Face", mat); 46 } 47 } 48 49 // 接收到输入时 退出 50 if (cv::waitKey(30) > 0) { 51 break; 52 } 53 } 54 55 return 0; 56 }