【Opencv图像处理】利用联级分类器实现人脸检测

CascadeClassifier人脸识别

基本理论

使用基于Haar特征的级联分类器进行对象检测是Paul Viola和Michael Jones在2001年的论文"使用简单特征的增强级联的快速对象检测"中提出的一种有效的对象检测方法。这是一种基于机器学习的方法,其中级联函数是从许多正负图像中训练的。然后,它用于检测其他图像中的对象。

C++代码

使用 cv::CascadeClassifier 类来检测视频流中的对象。具体而言,我们将使用以下函数:
cv::CascadeClassifier::load 以加载.xml分类器文件。它可以是 Haar 或 LBP 分类器
cv::CascadeClassifier::detMultiScale 来执行检测。

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include<opencv2/objdetect.hpp>//对象检测头文件
void main()
{
    VideoCapture cap(0);
    Mat img;
    time_t start, end;
    char str[20];

    while(true)
    {
        time(&start);
        cap.read(img);
        CascadeClassifier faceCascade;/*用于对象检测的级联分类器类*/
        faceCascade.load("D:\\QT\\Opencv\\Resources\\haarcascade_frontalface_default.xml");//从文件加载分类器(已经训练好的模型)
        if(faceCascade.empty()) cout<<"XML file is empty"<<endl;

        vector<Rect> faces;//  save Rect vector
        faceCascade.detectMultiScale(img, faces, 1.1, 10);//在输入图像中检测不同大小的对象。检测到的对象将以矩形列表的形式返回。
        for(int i=0; i<faces.size(); i++)
        {
            rectangle(img, faces[i].tl(), faces[i].br(), Scalar(255,255,0), 3);//绘制矩形
        }
        time(&end);
        double seconds = difftime (end, start);
        auto fps  = 1 / seconds;
        string FPSstring("FPS:");
        sprintf_s(str, "%.2f", fps);
        FPSstring += str;
        putText(img, FPSstring, Point(5,20),FONT_HERSHEY_SIMPLEX,0.5,Scalar(255,0,0));
        imshow("Image", img);
        waitKey(1);//增加延时
    }

结果展示

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
级联分类器训练的人脸识别。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值