IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【opencv】cascades 级联分类器人脸识别-打开摄像头 -> 正文阅读

[人工智能]【opencv】cascades 级联分类器人脸识别-打开摄像头

#include <opencv2/opencv.hpp>  
#include <unistd.h>
#include <getopt.h>

using namespace std;
using namespace cv;
 
int main(int argc,char**argv)
{
    char ch;
    string path = "haarcascade_frontalface_alt2.xml";
    while((ch = getopt(argc, argv, "c:")) != EOF){
        switch(ch){
            case 'c':
                path = optarg;
                break;
            default:
                printf("请输入参数。");
                return 1;
        }
    }
	VideoCapture cap(0);    //打开默认摄像头  
	if (!cap.isOpened())
	{
		return -1;
	}
	Mat frame;
	Mat gray;
	//这个分类器是人脸检测所用
	CascadeClassifier cascade;
	
    //训练好的文件名称,放置在可执行文件同目录下  
	cascade.load(path);//感觉用lbpcascade_frontalface效果没有它好,注意哈!要是正脸
    printf("加载成功;请将摄像头对准检测对象!\n");
    while (1)
	{
		cap >> frame;
  
		vector<Rect> faces(0);//建立用于存放人脸的向量容器
		
		cvtColor(frame, gray, COLOR_RGB2GRAY);//测试图像必须为灰度图
		
		equalizeHist(gray, gray); //变换后的图像进行直方图均值化处理  
		//检测人脸
		cascade.detectMultiScale(gray, faces,
			1.1, 4, 0
			//|CV_HAAR_FIND_BIGGEST_OBJECT  
			// | CV_HAAR_DO_ROUGH_SEARCH,
			// | CV_HAAR_DO_CANNY_PRUNING,
			//| CV_HAAR_SCALE_IMAGE,
			,Size(30, 30), Size(500, 500));
		for (int i = 0; i < faces.size(); i++)
		{
			printf("x:%3d,y:%3d,w:%3d,h%3d\n",faces[i].x, faces[i].y,faces[i].width,faces[i].height);
			Scalar color = Scalar(255, 0, 255);//所取的颜色任意值
			rectangle(frame, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), color, 1, 8);//放入缓存
		}
        if(true){
            imshow("face", frame);
            if(waitKey(200)==27){
                break;
            }
        }
        else
            usleep(200);
	}
 
	return 0;
}
 

#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <string>
#include <getopt.h>
#include <dirent.h>
#include <vector>
#include <sys/stat.h>


using namespace cv;
using namespace std;

void putData(const string &file,const string &data){
    auto fp=fopen(file.c_str(),"a+");
    fwrite(data.c_str(),sizeof(char),data.size(),fp);
    fclose(fp);
}

bool GetFileList(const string &basePath, vector<string> &pathList) {
    DIR *dir;
    struct dirent *ptr;
    if ((dir = opendir(basePath.c_str())) == nullptr) {
        return false;
    }

    while ((ptr = readdir(dir)) != nullptr) {
        if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)    ///current dir OR parrent dir
            continue;
        else if (ptr->d_type == 8) {    ///file
            pathList.push_back(basePath + "/" + ptr->d_name);
        } else if (ptr->d_type == 10) {    ///link file
            // printf("d_name:%s/%s\n", basePath, ptr->d_name);
        } else if (ptr->d_type == 4)    ///dir
        {
            GetFileList(basePath + "/" + ptr->d_name, pathList);
        }
    }
    closedir(dir);
    return true;
}

int main(int argc,char *argv[]){
    string file;
    string path,Path;
    string savePath;
    string saveInfoPath;
    int width=0;
    int height=0;
    char ch;
    bool sortFlag = false;

    while((ch = getopt(argc, argv, "P:p:f:w:h:so:O:")) != EOF)
    {
        switch(ch)
        {
            case 'f':
                file = optarg;
                break;
            case 'P':
                Path = optarg;
                break;
            case 'p':
                path = optarg;
                break;
            case 'o':
                savePath = optarg;
                break;
            case 'O':
                saveInfoPath = optarg;
                break;
            case 'w':
                width = strtol(optarg,nullptr,10);
                break;
            case 'h':
                height = strtol(optarg,nullptr,10);
                break;
            case 's':
                sortFlag = true;
                break;
            default:
                printf("请传入参数:-p 文件夹 -P 另存文件夹 -f 文件 -w 宽度 -h 高度 -s 排序 -o 输出文件 -O 信息文件");
                return 1;
        }
    }
    if(file.empty() && path.empty()){
        return 1;
    }
    if(width <=0 || height <=0){
        return 2;
    }
    if(path.empty()){
        Mat img = imread(file);
        resize(img,img,Size(width,height));
        imwrite(file,img);
        printf("%d\n",1);
    }else{
        vector<string> fileList;
        vector<Mat> imgList;
        GetFileList(path,fileList);
        for(size_t i=0;i< fileList.size();i++ ){
            auto f = fileList[i];
            Mat img = imread(f);
            resize(img,img,Size(width,height));
            if(sortFlag){
                if(Path.empty())
                    remove(f.c_str());
                imgList.push_back(img);
            }else{
                imwrite(f,img);
                if(!savePath.empty())
                    putData(savePath,f + " 1 0 0 "+to_string(width)+" "+to_string(height)+"\r\n");
                if(!saveInfoPath.empty())
                    putData(saveInfoPath,f + "\r\n");
            }
        }
        if(sortFlag){
            for(size_t j=0;j<imgList.size();j++){
                Mat img = imgList[j];
                string ex = ".png";
                char _path[256 * 4];
                memset(_path,0x00,sizeof(_path));
                //string newF = path + "/" + to_string(j) + ex;
                if(Path.empty())
                    sprintf(_path,"%s/%04ld%s",path.c_str(),j,ex.c_str());
                else
                    sprintf(_path,"%s/%04ld%s",Path.c_str(),j,ex.c_str());
                bool flag = imwrite(_path,img);
                if(!savePath.empty())
                    putData(savePath,string(_path) + " 1 0 0 "+to_string(width)+" "+to_string(height)+"\r\n");
                if(!saveInfoPath.empty())
                    putData(saveInfoPath,string(_path) + "\r\n");
            }
        }
        printf("%ld\n",fileList.size());
    }

    return 0;
}

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 11:56:10  更:2022-05-19 11:58:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:47:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码