1. 程式人生 > 其它 >OpenCV使用級聯分類器實現人臉檢測

OpenCV使用級聯分類器實現人臉檢測

一、概述

  案例:使用opencv級聯分類器CascadeClassifier+其提供的特徵資料實現人臉檢測,檢測到人臉後使用紅框畫出來。 

API介紹:
detectMultiScale( InputArray image, CV_OUT std::vector
<Rect>& objects,double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize
= Size(), Size maxSize = Size(), );
image:輸入影象
objects:檢測到的目標區域陣列(因一副影象中有可能有多個人臉)
scaleFactor:搜尋前後兩次視窗大小比例係數,預設為1:1,即每次搜尋視窗擴大10%
minNeighbors:構成檢測目標的相鄰矩形的最小個數 如果組成檢測目標的小矩形的個數和小於minneighbors - 1 都會被排除,如果minneighbors為0 則函式不做任何操作就返回所有被檢候選矩形框。
flags:若設定為CV_HAAR_DO_CANNY_PRUNING 函式將會使用Canny邊緣檢測來排除邊緣過多或過少的區域,預設寫0即可
minSize:檢測的最小尺寸
maxSize:檢測的最大尺寸

  實現人臉檢測的步驟:

    1.例項化CascadeClassifier face_cascade

    2.使用load載入特徵資料

    3.載入待檢測影象

    4.影象灰度化

    5.將灰度圖進行直方圖均衡化

    6.進行多尺度檢測,並輸出檢測到的人臉區域候選陣列

    7.將人臉區域陣列繪製並顯示到原圖輸出

  

二、程式碼示例

 //載入特徵資料
    CascadeClassifier face_cascade;
    if(!face_cascade.load(xmlPath.toStdString())){
        qDebug()<<"
不能載入特徵資料"; return; } Mat src = imread(filePath); if(src.empty()){ qDebug()<<"圖片不能為空"; return; } imshow("src",src); Mat gray; cvtColor(src,gray,COLOR_BGR2GRAY); //進行直方圖均衡化 equalizeHist(gray,gray); // imshow("equalizHist",gray); //執行多尺度特徵檢測 vector<Rect> faces; face_cascade.detectMultiScale(gray,faces,1.1,minTargetRectCount,0,Size(24,24)); for(size_t i = 0;i<faces.size();i++){ rectangle(src,faces[i],Scalar(0,0,255),2,LINE_8,0); } imshow("result",src);

 

三、示例圖片