随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

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   飘杨......  阅读(255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2018-04-09 android 图片上传图片 报Socket: Broken pipe
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示