// cascade.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
using namespace cv;
using namespace std;
void creatTable(vector &table, int alpha, int beta)
{
for (int i = 0; i < 255; i++)
{
table.push_back(alpha * i + beta);
if (table[i] > 255)
{
table[i] = 255;
}
if(table[i] < 0)
{
table[i] = 0;
}
}
}
void BrightnessAdjustment(Mat& src, Mat& dst, vector table)
{
for (int i = 0; i < src.rows; i++)
{
uchar* data1 = src.ptr(i);
uchar* data2 = dst.ptr(i);
for (int j = 0; j < src.cols; j++)
{
data2[j] = table[data1[j]];
}
}
}
int main(int argc, char** argv) {
String fileName = "D:\temp\cascade\model\haarcascade_frontalface_alt.xml";//设置文件路径
CascadeClassifier face_classifier;//创建分类器
if (!face_classifier.load(fileName))
{//加载分类数据
printf("could not load face feature data...n");
return -1;
}
//string imagePath = "D:\temp\cascade\test";
string imagePath = "D:\temp\cascade\image\train\1";
vector vecImage;
glob(imagePath, vecImage);
for (int i = 0; i < vecImage.size(); i++)
{
Mat src = imread(vecImage[i]);
if (src.empty())
{
printf("could not load image...n");
return -1;
}
//imshow("input image", src);
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);//转成灰度图
equalizeHist(gray, gray);//直方图均衡化,提高对比度
vector table;
creatTable(table, 1.5, 10);
BrightnessAdjustment(gray, gray, table);
imshow("input image", gray);
waitKey(0);
vector faces;
face_classifier.detectMultiScale(gray, faces, 1.2, 3, 0, Size(24, 24));//在多尺度上检测
for (size_t t = 0; t < faces.size(); t++)
{
rectangle(src, faces[static_cast(t)], Scalar(0, 0, 255), 2, 8, 0);
}
imshow("detect faces", src);
waitKey(0);
}
return 0;
}