圖像處理項目——制作自己的人臉數據集


制作自己的人臉數據集

*開發環境為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 }

三 : 制作結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM