图像处理项目——制作自己的人脸数据集 - AI大道理

时间:2024-03-12 20:13:08

图像处理项目——制作自己的人脸数据集

制作自己的人脸数据集

*开发环境为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 }

三 : 制作结果