級聯分類器的計算特征值的基礎類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) );