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();

 

三、图片演示

 

posted on 2022-04-09 11:18  飘杨......  阅读(215)  评论(0编辑  收藏  举报