图像处理项目——制作自己的人脸数据集
制作自己的人脸数据集
*开发环境为visual studio2010
*使用的是opencv中的Haart特征分类器,harr Cascades
*检测对象为人脸照片
一:主要步骤
1、加载人脸检测器
2、打开电脑摄像头,载入视频流,抽取帧,进行灰度化处理
3、识别人脸,采集20张保存到文件中
二 :代码
1 /**************************************************** 2 制作自己的人脸数据集: 3 1、加载人脸检测器 4 2、打开电脑摄像头,载入视频流,抽取帧,进行灰度化处理 5 3、识别人脸,采集20张保存到文件中 6 *****************************************************/ 7 #include "opencv2/objdetect.hpp" 8 #include "opencv2/videoio.hpp" 9 #include "opencv2/highgui.hpp" 10 #include "opencv2/imgproc.hpp" 11 #include <iostream> 12 #include <stdio.h> 13 #include <string.h> 14 #include <stdlib.h> 15 using namespace std; 16 using namespace cv; 17 18 int main() 19 { 20 Mat img; //用于存储每一帧的图像 21 Mat imgGray; //用于存储灰度图 22 Mat myFace; //用于存储我的人脸数据集 23 int count=1; //图片计数 24 CascadeClassifier cascades; //定义人脸分类器,opencv中的harr Cascades 25 cascades.load("models/lbpcascade_frontalface.xml"); //加载人脸检测器 26 VideoCapture cap; 27 cap.open(0); //打开摄像头 28 //cap.open("E://demo.avi"); //打开视频 29 std::vector<Rect> faces; //定义容器存储人脸数据 30 //循环20张人脸保存 31 while(1) 32 { 33 cap >> img; //从视频中读取当前帧 34 cvtColor(img,imgGray,COLOR_BGR2GRAY); //灰度化 35 //检测出图片中的人脸,用vector保存各个人脸的坐标、大小(用矩形表示)到faces 36 cascades.detectMultiScale(imgGray,faces, 1.1, 5,0); 37 for(size_t i = 0; i < faces.size(); i++){ 38 rectangle(img, faces[i], Scalar(0, 255, 0), 3, 8, 0); 39 } 40 //如果检测到人脸 41 if(faces.size() == 1) 42 { 43 //如果图片小于等于20张 44 if(count<=20) 45 { 46 Mat faceROI = imgGray(faces[0]); 47 resize(faceROI, myFace,Size(92,112));//opencv中resize()函数将识别到的人脸图像自动改变尺寸为92x112 48 putText(img, "face_zsc", faces[0].tl(), FONT_HERSHEY_DUPLEX, 1.2, Scalar(71, 99, 255), 2, LINE_8); 49 string filename = format("faces/myface/%d.jpg", count); //保存到此文件 50 imwrite(filename, myFace); //通过imwrite函数将resize()过后的图片保存到背景数据 51 imshow(filename,myFace); 52 waitKey(100); 53 destroyWindow(filename); 54 count++; 55 } 56 } 57 imshow("frame",img); 58 waitKey(100); 59 60 } 61 return 0; 62 system("pause"); 63 }
三 : 制作结果