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 }

 

 

posted @ 2013-12-18 23:17  easyfrog  阅读(2077)  评论(0编辑  收藏  举报