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


    制作自己的人脸数据集

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

    三 : 制作结果

    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    Jisa's Notebook
    前端常见跨域解决方案
    串口
    logging的使用
    Hexo
    优美的二维树状数组
    数据结构之树的基本概念
    js 监听ios手机键盘弹起和收起的事件
    jquery.qrcode.js生成二维码(前端生成二维码)
    js产生一个随机的字符串数字组合
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/10533485.html
Copyright © 2020-2023  润新知