美文网首页
三 (3.2) Opencv效果实现 - 人脸检测

三 (3.2) Opencv效果实现 - 人脸检测

作者: 交大小丑 | 来源:发表于2018-10-24 15:44 被阅读0次

    在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。

    在OpenCV中,使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV的安装目录下的sources文件夹里的data文件夹里可以看到下图所示的内容:

    image.png

    上图中文件夹的名字“haarcascades”、“hogcascades”和“lbpcascades”分别表示通过“haar”、“hog”和“lbp”三种不同的特征而训练出的分类器:即各文件夹里的文件。"haar"特征主要用于人脸检测,“hog”特征主要用于行人检测,“lbp”特征主要用于人脸识别。打开“haarcascades”文件夹,如下图所示

    image.png

    图中的XML文件即是我们人脸检测所需要的分类器文件。在实际使用中,推荐使用上图中被标记的“haarcascade_frontalface_alt2.xml”分类器文件,准确率和速度都比较好。

    图片中的人脸检测

    //头文件
    #include<opencv2/objdetect/objdetect.hpp>
    #include<opencv2/highgui/highgui.hpp>
    #include<opencv2/imgproc/imgproc.hpp>
     
    using namespace cv;
     
    //人脸检测的类
    CascadeClassifier faceCascade;
     
    int main()
    {
        faceCascade.load("../data/haarcascade_frontalface_alt2.xml");   //加载分类器,注意文件路径
     
        Mat img = imread("../data/PrettyGirl.jpg");
        Mat imgGray;
        vector<Rect> faces;
     
        if(img.empty())
        {
          return 1;
        }
     
        if(img.channels() ==3)
        {
           cvtColor(img, imgGray, CV_RGB2GRAY);
        }
        else
        {
           imgGray = img;
        }
     
        faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0));   //检测人脸
     
        if(faces.size()>0)
        {
           for(int i =0; i<faces.size(); i++)
           {
               rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), 
                               Scalar(0, 255, 0), 1, 8);    //框出人脸位置
           }
        }
     
        imshow("FacesOfPrettyGirl", img);
     
        waitKey(0);
        return 0;
    }
    

    视频/摄像头中的人脸检测

    //头文件
    #include<opencv2/objdetect/objdetect.hpp>
    #include<opencv2/highgui/highgui.hpp>
    #include<opencv2/imgproc/imgproc.hpp>
     
    using namespace cv;
     
    //人脸检测的类
    CascadeClassifier faceCascade;
     
    int main()
    {
        faceCascade.load("../data/haarcascade_frontalface_alt2.xml");   //加载分类器,注意文件路径
     
        VideoCapture cap;  
        cap.open(0);   //打开摄像头
        //cap.open("../data/test.avi");   //打开视频
        Mat img, imgGray;
        vector<Rect> faces;
        int c = 0;
     
        if(!cap.isOpened())
        {
          return 1;
        }
     
        while(c!=27)
        {
            cap>>img;
           if(img.channels() ==3)
           {
              cvtColor(img, imgGray, CV_RGB2GRAY);
           }
           else
           {
              imgGray = img;
           }
     
           faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0));   //检测人脸
     
           if(faces.size()>0)
           {
              for(int i =0; i<faces.size(); i++)
              {
                  rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), 
                                  Scalar(0, 255, 0), 1, 8);    //框出人脸位置
              }
           }
        
           imshow("Camera", img);
           c = waitKey(1);
        }
        return 0;
    }
    

    人脸检测

    【OpenCV人脸识别入门教程之二】人脸检测 - 生活,哭泣着奔向死亡,又放不下理想,挣扎着歌唱 - CSDN博客 https://blog.csdn.net/lsq2902101015/article/details/47057081

    OpenCV人脸检测(完整源码+思路) - IT1995的博客 - CSDN博客 https://blog.csdn.net/qq78442761/article/details/61918994

    人脸检测是人脸识别的基础,人脸识别的文章:
    https://blog.csdn.net/qq78442761/article/details/61918994

    相关文章

      网友评论

          本文标题:三 (3.2) Opencv效果实现 - 人脸检测

          本文链接:https://www.haomeiwen.com/subject/rskxtqtx.html