概念
????????OpenCV 級聯分類器是一種基于 Haar 特征、AdaBoost 算法和級聯結構的目標檢測方法,通過多階段篩選快速排除非目標區域,實現高效實時檢測(如人臉、行人等)。
加載級聯分類器
// 加載級聯分類器CascadeClassifier cascade;// 加載級聯分類器文件cascade.load("xml/cars.xml");
關鍵代碼
void detec_car(Mat &frame,CascadeClassifier cascade,double scale)
{// 灰度處理Mat gray_frame;cvtColor(frame,gray_frame,CV_BGR2GRAY);// 壓縮灰度圖到原來一半Mat smalling(cvRound(frame.rows/scale),cvRound(frame.cols/scale),CV_8UC1);resize(gray_frame,smalling,smalling.size(),0,0,INTER_LINEAR);// 直方圖均值化:利用直方圖均衡函數讓圖像呈現出黑白分明,凸顯出主要檢測的目標equalizeHist(smalling,smalling);// 使用級聯分類器模型識別車輛vector<Rect> cars;cascade.detectMultiScale(smalling,cars,1.1,2,0|CV_HAAR_SCALE_IMAGE,Size(30,30));// 繪制矩形框vector<Rect>::const_iterator itr;for(itr=cars.begin();itr!=cars.end();itr++){rectangle(frame,cvPoint(cvRound(itr->x*scale),cvRound(itr->y*scale)),cvPoint(cvRound((itr->x+itr->width)*scale),cvRound((itr->y+itr->height)*scale)),Scalar(0,255,0),2,3);}imshow("res",frame);
}