#include
#include
using namespace std;
using namespace cv;
String Haar_fileName = "haarcascade_frontalface_alt.xml";//Haar
String LBP_fileName = "lbpcascade_frontalface.xml";//LBP
CascadeClassifier face_Haar_cascade;
CascadeClassifier face_LBP_cascade;
int main(int argc, char** argv)
{
if (!face_Haar_cascade.load(Haar_fileName))
{
cout << "Haar_cascade error" << endl;
return -1;
};
if (!face_LBP_cascade.load(LBP_fileName))
{
cout << "LBP_cascade error" << endl;
return -2;
};
Mat src, gray;
src = imread("C:/Users/good/Desktop/test14.jpg");
if (src.empty())
{
cout << "could not load image1..." << endl;
return -3;
}
//namedWindow("src", WINDOW_AUTOSIZE);
//imshow("src", src);
cvtColor(src, gray, COLOR_BGR2GRAY);//转换为灰度
equalizeHist(gray, gray);//直方图均衡化
vector faces;
int st = getTickCount();//返回从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD
face_Haar_cascade.detectMultiScale(gray, faces, 1.1, 3, 0, Size(30,30));
int nd = (getTickCount() - st);
cout << "Haar耗时:" << nd << endl;
vector _faces;
int _st = getTickCount();
face_LBP_cascade.detectMultiScale(gray, _faces, 1.1, 3, 0, Size(30, 30));
int _nd = (getTickCount() - _st);
cout << "LBP耗时:" << _nd << endl;//LBP耗时更短,检测更快
for (size_t i = 0; i < faces.size(); i++)
{
//绘制矩形
rectangle(src, faces[i], Scalar(255, 0, 0), 2, 8, 0);
}
imshow("显示", src);
waitKey(0);
return 0;
}
输出结果: