OpenCV视频检测人脸

折月煮酒 提交于 2020-12-06 15:54:50

用opencv自带xml。打开摄像头,实时视频检测人脸

可以直接运行在linux下或者Windows下的VS中

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <ctime>
 4 #include <opencv2/opencv.hpp>
 5 #include <opencv2/highgui/highgui.hpp>
 6 #include <opencv2/imgproc/imgproc.hpp>
 7 #include "opencv2/core/core.hpp"
 8 using namespace cv;
 9 using namespace std;
10 
11 #define W 1920
12 #define H 1080
13 
14 string face_cascade_name = "E:/opencv_VS/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml";
15 CascadeClassifier face_cascade;
16 int facesnum = 0;
17 void DectectorAndDis(Mat frame)
18 {
19     Mat face_gray = Mat::zeros(H, W, CV_8UC3);
20     vector<Rect> faces;
21     cvtColor(frame, face_gray, CV_BGR2GRAY);//RGB转化为灰度
22     equalizeHist(face_gray, face_gray);//直方图均衡化
23     double t = (double)getTickCount();
24     face_cascade.detectMultiScale(face_gray, faces, 1.75, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
25     t = ((double)getTickCount() - t)/getTickFrequency();
26     
27     for (int i = 0; i < faces.size(); i++){
28         Point CvBox2D(int(faces[i].x + faces[i].width*0.5), int(faces[i].y + faces[i].height*0.5));
29         ellipse(frame, CvBox2D, Size(int(faces[i].width*0.5), int(faces[i].height*0.5)), 0, 0, 360, Scalar(255, 0, 0), 4, 8, 0);    
30      
31     }
32     if( facesnum != faces.size())
33     {
34         cout << "人脸数:" << faces.size() << endl;
35         facesnum = faces.size();
36         printf("本次检测使用: %0.2f ms\n",t*1000);
37     }
38     
39     imshow("读取视频", frame);
40 }
41 int main(int argc, char* argv[])
42 {    
43     VideoCapture capture;    
44     capture.open(0);
45     Mat frame = Mat::zeros(H, W, CV_8UC3);
46     Mat frameaftcanny = Mat::zeros(H, W, CV_8UC3);
47     face_cascade.load(face_cascade_name);
48     while (1)
49     {
50         capture >> frame;
51         //cv::Canny(frame, frameaftcanny, 100, 300, 3);
52         //imshow("边缘检测", frameaftcanny);
53         DectectorAndDis(frame);
54         cv::waitKey(20);
55     }
56 
57     return 0;
58 }
View Code

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!