cvHaarDetectObjects函式與人臉識別等應用
阿新 • • 發佈:2018-12-18
OpenCV的人臉檢測主要是呼叫訓練好的cascade(Haar分類器)來進行模式匹配。
cvHaarDetectObjects,先將影象灰度化,根據傳入引數判斷是否進行canny邊緣處理(預設不使用),再進行匹配。匹配後收集找出的匹配塊,過濾噪聲,計算相鄰個數如果超過了規定值(傳入的min_neighbors)就當成輸出結果,否則刪去。
匹配迴圈:將匹配分類器放大scale(傳入值)倍,同時原圖縮小scale倍,進行匹配,直到匹配分類器的大小大於原圖,則返回匹配結果。匹配的時候呼叫cvRunHaarClassifierCascade來進行匹配,將所有結果存入CvSeq* Seq (可動態增長元素序列),將結果傳給cvHaarDetectObjects。
cvRunHaarClassifierCascade函式整體是根據傳入的影象和cascade來進行匹配。並且可以根據傳入的cascade型別不同(樹型、stump(不完整的樹)或其他的),進行不同的匹配方式。
函式 cvRunHaarClassifierCascade 用於對單幅圖片的檢測。在函式呼叫前首先利用 cvSetImagesForHaarClassifierCascade設定積分圖和合適的比例係數 (=> 視窗尺寸)。當分析的矩形框全部通過級聯分類器每一層的時返回正值(這是一個候選目標),否則返回0或負值。
為了瞭解OpenCV人臉檢測中尋找匹配影象的詳細過程,就把cvHaarDetectObjects和cvRunHaarClassifierCascade的原始檔詳細看了一遍,並打上了註釋。方便大家閱讀。
附cvHaarDetectObjects程式碼: