OpenCV——人脸检测

Posted Not-Bad

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV——人脸检测相关的知识,希望对你有一定的参考价值。

OpenCV支持的目标检测的方法: 利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification)

1.加载级联分类器

CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt2.xml");

2.打开视频

VideoCapture capture(0);
if (!capture.isOpened()){
        return -1;
    }

3.对每一帧图像进行检测并标出人脸

while (true){
        Mat Image, grayImage;
        capture >> Image;                                //读取当前帧

        //缩小图片加快检测速度
        Mat smallImg(cvRound(Image.rows / 2.0), cvRound(Image.cols / 2.0), CV_8UC1);

        //处理图像
        grayImage.create(Image.size(), Image.type());
        cvtColor(Image, grayImage, CV_BGR2GRAY);
        resize(grayImage, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);
        equalizeHist(smallImg, smallImg);

        vector<Rect> rect;
        cascade.detectMultiScale(smallImg, rect);

        for (int i = 0; i < rect.size(); i++)
        {
            Point  center;                                                      //圆心
            int radius;                                                         //圆的半径

            //由于smallImg是Image的1/2,检测smallImg在Image上绘制圆,要将圆的各类信息扩大一倍

            center.x = cvRound((rect[i].x + rect[i].width * 0.5)) * 2;
            center.y = cvRound((rect[i].y + rect[i].height * 0.5)) * 2;
            radius = cvRound((rect[i].width + rect[i].height) * 0.25) * 2;

            circle(Image, center, radius, CV_RGB(255, 0, 0), 2);                //绘制圆形
        }
        imshow("人脸识别", Image);
        if (waitKey(30) >= 0)break;
    }

 

OK,就是这样

以上是关于OpenCV——人脸检测的主要内容,如果未能解决你的问题,请参考以下文章

opencv代码没有检测到人脸的数量也没有在人脸周围放一个圆圈

基于OpenCV读取摄像头进行人脸检测和人脸识别

OpenCV + Python 人脸检测

Python-opencv学习第三十课:人脸检测

Python+OpenCV 简单实现人脸检测多个和人脸识别 2(附代码)

人脸检测 OpenCV + Qt + cvMat