三 (3.2) Opencv效果實現(xiàn) - 人臉檢測

在OpenCV中主要使用了兩種特征(即兩種方法)進行人臉檢測,Haar特征和LBP特征。

在OpenCV中,使用已經(jīng)訓練好的XML格式的分類器進行人臉檢測。在OpenCV的安裝目錄下的sources文件夾里的data文件夾里可以看到下圖所示的內(nèi)容:

image.png

上圖中文件夾的名字“haarcascades”、“hogcascades”和“l(fā)bpcascades”分別表示通過“haar”、“hog”和“l(fā)bp”三種不同的特征而訓練出的分類器:即各文件夾里的文件。"haar"特征主要用于人臉檢測,“hog”特征主要用于行人檢測,“l(fā)bp”特征主要用于人臉識別。打開“haarcascades”文件夾,如下圖所示

image.png

圖中的XML文件即是我們?nèi)四槞z測所需要的分類器文件。在實際使用中,推薦使用上圖中被標記的“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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容