c++ opencv 脸部样本提取并保存

**
这是一个打开摄像头录入人脸并保存在指定文件夹的小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
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值