**
这是一个打开摄像头录入人脸并保存在指定文件夹的小demo。
使用方法:
**
./Get_faceSamples [dirname/] [samples_number]
**
C++ code
**
/*************************************************************************
> File Name: Get_faceSamples.cpp
> Author: jiang
> Mail: 482959838@qq.com
> Created Time: 2019年3月12日 星期三 15时19分18秒
************************************************************************/
//使用方法 ./Get_faceSamples [文件夹/] [样本数量]
#include<iostream>
#include<opencv2/opencv.hpp>
#include<string>
#include <sys/stat.h>
#include <sys/types.h>
using namespace std;
int main(int argv,char **inname)
{
if(argv <= 1)
return 1;
cv::CascadeClassifier face_cascade;
vector<cv::Rect> faceRect; // all functions share
if(!face_cascade.load("/home/jiang/Repositories/FaceDeal_Class/haarcascade_frontalface_alt.xml"))
{
cout << "Load frontalface_alt.xml failed!" << endl;
return 0;
}
char* name = inname[1]; //"/yj/"
int len_name = strlen(name);
if(name[len_name - 1] != '/')
return 1;
int len_num = strlen(inname[2]);
int NUM = 100;
if(argv > 1){
NUM = 0;
for(int k = 0;k < len_num;k++){
NUM += pow(10,len_num-1-k)*(inname[2][k] - '0'); // pow(a,b) a^b
cout<<NUM<<endl;
}
}
char *addchar = "/=";
mkdir(name,S_IRWXU); //当前目录创建文件夹
int count = 0;
int nums = 0;
//int num[3];
//char xuhao[] = "/000.png";
int num_faces = 0;
cv::Mat img,image_gray,face;
cv::VideoCapture cap(0);
cap >> img;
while(1)
{
cap >> img;
cv::cvtColor(img,image_gray,CV_BGR2GRAY);
cv::equalizeHist(image_gray,image_gray);
face_cascade.detectMultiScale(image_gray, faceRect, 1.2, 2, 0 | CV_HAAR_SCALE_IMAGE, cv::Size(30, 30));
for(size_t i = 0;i < faceRect.size();i ++){
if(i > 0)
continue;
count ++;
rectangle(img, faceRect[i], cv::Scalar(0, 0, 255), 1); //画出识别的face
if(count%20){
cout <<name<<":"<< nums <<endl;
face = img(cv::Rect(faceRect[i].x,faceRect[i].y,faceRect[i].width, faceRect[i].height));
cv::resize(face,face,cv::Size(200,200));
cv::imwrite(name+to_string(nums)+".png",face); //strcat(name,xuhao) 字符串复制 name += xuhao; strcpy
//imshow("face",face);
nums++;
}
}
cv::imshow("src",img);
if(nums/NUM)
break;
if(cv::waitKey(1) == 27)
break;
}
cv::destroyAllWindows();
return 0;
}
**
makefile文件:
**
CC = g++
BOOSTLIB = -std=c++11 -pthread
LIB = $(shell pkg-config --libs opencv)
INC = $(shell pkg-config --cflags opencv)
SRCFILE = Get_faceSamples.cpp
DEBUGFLG=
all:
$(CC) $(SRCFILE) $(DEBUGFLG) $(INC) $(BOOSTLIB) $(LIB) -o Get_faceSamples
clean:
rm -rf Get_faceSamples