OpenCV使用级联分类器找出视频文件中的人脸
一、概述
案例:使用OpenCV自带的级联分类器找出视频中的人脸
操作步骤:
1.实例化VideoCapture
2.使用其open方法打开文件
3.检测是否打开了文件
4.创建CascadeClassifier实例
5.加载加载特征数据
6.循环读取视频文件中的每一帧
7.将读取出来的视频帧转为灰度图和直方图均衡化
8.使用detectMutilScale在不同的尺度空间找出人脸,并存入vector<Rect>中
9.使用rectangle将找出的人脸绘制并显示出来
10.循环从第6步开始循环,直到视频文件读取完成。
ps:两个重要的内容
1.使用VideoCapture读取视频文件的每一帧
2.利用CascadeClassifier识别人脸
二、代码示例
String filePath = "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml"; CascadeClassifier face_classifier; if(!face_classifier.load(filePath)){ qDebug()<<"Haar特征数据文件不能为空"; return; } VideoCapture videoCapture; videoCapture.open("/Users/yangwei/Downloads/1649470407696618.mp4"); if(!videoCapture.isOpened()){ qDebug()<<"打开了摄像头"; return; } Mat frame,gray; while(videoCapture.read(frame)){ qDebug()<<"读取视频帧"; cvtColor(frame,gray,COLOR_BGR2GRAY); equalizeHist(gray,gray); vector<Rect> faces; face_classifier.detectMultiScale(gray,faces,1.3,15,0,Size(30,30)); for(size_t i = 0;i<faces.size();i++){ rectangle(frame,faces[i],Scalar(0,0,255),3,LINE_8); } imshow("src",frame); waitKey(1000 / videoCapture.get(CAP_PROP_FPS)-10); } videoCapture.release();
三、图片演示