您的位置:首页 > 运维架构

人脸检测(opencv)

2016-07-22 11:23 387 查看
乍看人脸识别感觉很复杂,但是我们站在巨人的肩旁上,这些难题都迎刃而解,虽然实现和效果都很简单,在opencv中自带了很多的分类器和检测函数,分类器在(安装位置)\opencv\sources\data\haarcascades,当然也可以自己训练

步骤:

1:加载分类器;

2:调用检测函数detectMultiScale();

3:画出相关人脸区域;

代码实现:

#include<opencv2\opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

string face_cascade_name = "D:\\Opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
string window_name = "人脸识别";

void detectAndDisplay(Mat frame);

int main(int argc, char** argv){

Mat image=imread("1.png");
if (!image.data){
printf("[error] 没有图片\n");
return -1;
}

if (!face_cascade.load(face_cascade_name)){
printf("[error] 无法加载级联分类器文件!\n");
return -1;
}

detectAndDisplay(image);

waitKey(0);
}

void detectAndDisplay(Mat frame){
vector<Rect> faces;
Mat frame_gray;

cvtColor(frame, frame_gray, CV_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);

face_cascade.detectMultiScale(frame_gray, faces, 1.1, 6, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));

for (int i = 0; i < faces.size(); i++){
Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5);
ellipse(frame, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
cout << "faces"<<faces.at(i)<<endl;
}

imshow(window_name, frame);
}


效果显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv 脸部识别