CascadeClassifier:載入 Haar/LBP 級聯分類器模型(XML)。detectMultiScale:多尺度偵測物件(人臉、眼睛等)。VS2012 + OpenCV 2.4.7+(2.4.3 版 CascadeClassifier::load 有已知 bug 無法載入模型)。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
string faceCascadeName = "haarcascade_frontalface_alt.xml";
string eyeCascadeName = "haarcascade_eye_tree_eyeglasses.xml";
void detectAndDraw(Mat& img, CascadeClassifier& faceCascade,
CascadeClassifier& eyeCascade, double scale, bool tryFlip);
int main() {
CascadeClassifier faceCascade, eyeCascade;
faceCascade.load(faceCascadeName);
eyeCascade.load(eyeCascadeName);
Mat image = imread("girls.jpg", 1);
detectAndDraw(image, faceCascade, eyeCascade, 1.0, true);
waitKey(0);
return 0;
}
detectAndDrawcvtColor → resize → equalizeHist 提升對比度。faceCascade.detectMultiScale(smallImg, faces, 1.1, 2, 0, Size(30,30))。tryFlip,水平翻轉影像再偵測一次,將座標映射回原圖,合併結果(解決側臉偵測率低)。eyeCascade.detectMultiScale 偵測雙眼,畫圓標記。imshow("result", img)。| 參數 | 意義 | 建議值 |
|---|---|---|
| scaleFactor | 影像縮放比例(每次縮小比例) | 1.1~1.3 |
| minNeighbors | 候選框保留所需鄰近框數(越大越嚴格) | 2~5 |
| flags | CV_HAAR_SCALE_IMAGE 等優化旗標 | 0 或組合 |
| minSize | 最小偵測視窗 | Size(30,30) |
使用 cvGetTickCount() 計算偵測耗時(毫秒),輸出至主控台。
scaleFactor、minNeighbors、確認影像對比度。tryFlip 翻轉增強或改用 LBP 分類器。