OpenCV——級聯分類器(CascadeClassifier)


級聯分類器的計算特征值的基礎類FeatureEvaluator

功能:讀操作read、復制clone、獲得特征類型getFeatureType,分配圖片分配窗口的操作setImage、setWindow,計算有序特征calcOrd,計算絕對特征calcCat,創建分類器特征的結構create函數。

目標級聯矩形的分組函數groupRectangles

用load函數加載XML分類器文件具體步驟如下:                      {  PS:目前提供的分類器包括Haar分類器和LBP分類器(數據較少)}

    1.加載級聯分類器

CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_alt.xml");

    2.讀取視頻流

    3.對每一幀使用該分類器

先對圖像進行預處理——變成灰度圖,並將其直方圖均衡化

若檢測人臉,調用detectMultiScale函數,函數詳情如下:

void detectMultiScale(
    const Mat& image,                //待檢測灰度圖像
    CV_OUT vector<Rect>& objects,    //被檢測物體的矩形框向量
    double scaleFactor = 1.1,        //前后兩次相繼的掃描中搜索窗口的比例系數,默認為1.1 即每次搜索窗口擴大10%
    int minNeighbors = 3,            //構成檢測目標的相鄰矩形的最小個數 如果組成檢測目標的小矩形的個數和小於minneighbors - 1 都會被排除
                                     //如果minneighbors為0 則函數不做任何操作就返回所有被檢候選矩形框
    int flags = 0,                   //若設置為CV_HAAR_DO_CANNY_PRUNING 函數將會使用Canny邊緣檢測來排除邊緣過多或過少的區域 
    Size minSize = Size(),              
    Size maxSize = Size()            //最后兩個參數用來限制得到的目標區域的范圍     
);

 PS:flags對於新的分類器沒有用(但目前的haar分類器都是舊版的,CV_HAAR_DO_CANNY_PRUNING利用Canny邊緣檢測器來排除一些邊緣很少或者很多的圖像區域,CV_HAAR_SCALE_IMAGE就是按比例正常檢測,CV_HAAR_FIND_BIGGEST_OBJECT只檢測最大的物體,CV_HAAR_DO_ROUGH_SEARCH只做初略檢測)

實例代碼:

face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM