资源简介

1、本资源核心为.cpp源代码,利用OpenCV实现人脸及眼睛鼻子嘴巴等五官的检测与识别。2、压缩包内包含训练好的人脸等数据,存放在xml文件夹中。3、该项目可以识别检测出人脸和五官的大小及位置信息,并一并输出,内附Lena图及明星图识别范例。

资源截图

代码片段和文件信息

#include 
#include 
#include 
using namespace std;
using namespace cv;

int main(){
Mat image image_gray;
image = imread(“J:\\images\\lena.bmp“);
cvtColor(image image_gray CV_BGR2GRAY);//转为灰度图
equalizeHist(image_gray image_gray);//直方图均衡化,增加对比度方便处理


CascadeClassifier face_Classifier;//载入face分类器
if (!face_Classifier.load(“J:\\xml\\haarcascade_frontalface_alt2.xml“)){//读入训练好的人脸数据
cout << “Load haarcascade_frontalface_default.xml failed!“ << endl;
return 0;
}
vector faceRect;
//nose_Classifier.detectMultiScale(image_gray noseRect 1.1 30 0 | CV_HAAR_SCALE_IMAGE Size(30 30));
face_Classifier.detectMultiScale(image_gray faceRect 1.1 3 0 | CV_HAAR_SCALE_IMAGE Size(30 30));  // 分类器对象调用  
cout << “检测到的人脸个数为: “ << faceRect.size() << “\n“ << endl;
// 标记--在脸部画圆  
for (size_t faceIdx = 0; faceIdx < faceRect.size(); faceIdx++){//画出检测到的位置
//rectangle(image faceRect[faceIdx] Scalar(255 255 0));
cout << “人脸窗口的大小: “ << faceRect[faceIdx] << “\n“ << endl;
//将矩形框转化为圆形框。
Point center;
int radius;
center.x = cvRound(faceRect[0].x+faceRect[0].width*0.5);
center.y = cvRound(faceRect[0].y + faceRect[0].height*0.5);
radius = cvRound((faceRect[0].width +faceRect[0].height) * 0.25);
circle(image center radius Scalar(0 255 255) 2 8 0);//画出圆形人脸,黄色。
}

CascadeClassifier eye_Classifier;//载入eyes分类器
if (!eye_Classifier.load(“J:\\xml\\haarcascade_eye.xml“)){
cout << “Load haarcascade_mcs_eye.xml failed!“ << endl;
return 0;
}
vector eyeRect;
eye_Classifier.detectMultiScale(image_gray eyeRect 1.1 20 0 | CV_HAAR_SCALE_IMAGE Size(30 30));//检测
for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++){//画出检测到的位置
rectangle(image eyeRect[eyeIdx] Scalar(0 255 0));//绿色
cout << “眼睛窗口的大小: “ << eyeRect[eyeIdx]<<“\n“<< endl;
}

CascadeClassifier nose_Classifier;//载入nose分类器
if (!nose_Classifier.load(“J:\\xml\\haarcascade_mcs_nose.xml“)){
cout << “Load haarcascade_mcs_nose.xml failed!“ << endl;
return 0;
}
vector noseRect;
nose_Classifier.detectMultiScale(image_gray noseRect 1.1 30 0 | CV_HAAR_SCALE_IMAGE Size(30 30));//检测
for (size_t noseIdx = 0; noseIdx < noseRect.size(); noseIdx++){//画出检测到的位置
rectangle(image noseRect[noseIdx] Scalar(240 32 160));//紫色
noseRect[noseIdx].size();
cout << “鼻子窗口的大小: “ << noseRect[noseIdx] << “\n“ << endl;
}

CascadeClassifier mouth_Classifier;//载入mouth分类器
if (!mouth_Classifier.load(“J:\\xml\\haarcascade_mcs_mouth.xml“)){
cout << “Load haarcascade_mcs_mouth.xml!“ << endl;
return 0;
}
vector mouthRect;
mouth_Classifier.detectMultiScale(image_gray mouthRect 1.3 50 0 | CV_HAAR_SCALE_IMAGE Size(10 10));//检测
for (size_t mouthIdx = 0; mouthIdx < mouthRect.size(); mouthIdx++){//画出检测到的位置
rectangle(image mouthRect[mouthIdx] Scalar(255 255 0));//青色
cout << “嘴巴窗口的大小: “ << eyeRect[mouthIdx]

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     854293  2017-12-19 09:49  lena人脸及五官识别范例.png

     文件       3447  2017-12-19 09:51  face_eyes_nose_mouth_detect.cpp

     文件     341406  2015-01-25 14:31  xml\haarcascade_eye.xml

     文件     601661  2015-01-25 14:31  xml\haarcascade_eye_tree_eyeglasses.xml

     文件     540616  2015-01-25 14:31  xml\haarcascade_frontalface_alt2.xml

     文件     930127  2017-12-15 19:30  xml\haarcascade_frontalface_default.xml

     文件     358385  2017-12-15 19:30  xml\haarcascade_mcs_eyepair_big.xml

     文件     719806  2017-12-15 19:30  xml\haarcascade_mcs_mouth.xml

     文件    1585210  2017-12-15 19:30  xml\haarcascade_mcs_nose.xml

     文件     331875  2017-12-19 09:48  明星例子.png

     目录          0  2017-12-19 09:51  xml

----------- ---------  ---------- -----  ----

              6266826                    11


评论

共有 条评论