Opencv中有训练好的Haar特征分类器(.xml文件),位于“/opencv-2.4.11/data/haarcascades/”文件夹中,调用起来非常简单。
举个例子,我们想检测图片中的眼睛,就可以使用“haarcascade_eye.xml”这个分类器来做检测,代码如下:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/calib3d/calib3d.hpp>
using namespace std;
using namespace cv;
int main(){
Mat image,image_gray;
image = imread("lena.jpeg");
cvtColor(image,image_gray,CV_BGR2GRAY );//转为灰度图
equalizeHist(image_gray,image_gray);//直方图均衡化,增加对比度方便处理
CascadeClassifier eye_Classifier;//载入分类器
if(!eye_Classifier.load("haar/haarcascade_eye.xml")){
cout<<"Load haarcascade_mcs_eye.xml failed!"<<endl;
return 0;
}
vector<Rect> eyeRect;
eye_Classifier.detectMultiScale( image_gray, eyeRect, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );//检测
for (size_t eyeIdx = 0;eyeIdx < eyeRect.size();eyeIdx++){//画出检测到的位置
rectangle(image,eyeRect[eyeIdx],Scalar(0,0,255));
}
namedWindow("lena",0);
imshow("lena",image);
waitKey(0);
return 0;
}
检测结果: