基于OpenCV的人脸识别实现方案

学习编程更多是基于项目基础的
我这里做了一个简单项目:基于OpenCV的人脸识别
首先,安装和配置OpenCV环境,百度上有很多,这里就不多描述了,主要记录一些函数的使用方法和项目实现思路

项目实现分析:
将图像库中的文件读取到image模型中,将图片转化为二值图像,通过卷积变换得到特征信息,创建神经网络,将特征值分类输出。

准备工作
系统: Ubuntu18.04LTS
图像处理: OpenCV
神经网络: TensorFlow
图像库: MIT_Faces/training-originals
其他: 兴趣+坚持

1.创建主函数main
包含OpenCV头文件

#include <opencv2/opencv.hpp>  

创建一个Mat类型的vector向量,用于存放图像库缓存,
打开文件路径获取图片

    struct dirent *ptr;      
    DIR *dir;  
	vector<Mat> images;
	string FileName;
    string PATH = "../image/MIT-faces/training-originals/";  
    dir=opendir(PATH.c_str());
    cout << "upload image" << endl;
    while((ptr=readdir(dir))!=NULL)  
    {
        if(ptr->d_name[0] == '.')  
            continue;
		FileName = ptr->d_name;
        Mat dst = imread(PATH + FileName, 0 );
        Mat image_buf = Mat::zeros(dst.rows / 5 , dst.cols / 5, CV_8UC1); //输出图像大小 512*512 pix

        resize(dst, image_buf, image_buf.size(), 0, 0, INTER_LINEAR);
        if ( !image_buf.data )
		{
            printf("No image data \n");
			continue;
        }
        imshow(ptr->d_name, image_buf);
        images.push_back(image_buf);
        waitKey(30);
    }

程序模块分析:

    struct dirent *ptr;      
    DIR *dir;  
	vector<Mat> images;
	string FileName;
    string PATH = "../image/MIT-faces/training-originals/";  
    dir=opendir(PATH.c_str());
    cout << "upload image" << endl;

创建图像缓存、文件路径、文件名,用于打开读取文件

    while((ptr=readdir(dir))!=NULL)  
    {
        if(ptr->d_name[0] == '.')  
            continue;
		FileName = ptr->d_name;

遍历文件,判断文件名是否合法

    Mat dst = imread(PATH + FileName, 0 );
    Mat image_buf = Mat::zeros(dst.rows / 5 , dst.cols / 5, CV_8UC1); //输出图像大小 512*512 pix

读取图片并创建图片输出缓存

    resize(dst, image_buf, image_buf.size(), 0, 0, INTER_LINEAR);

图像缩放

        if ( !image_buf.data )
		{
            printf("No image data \n");
			continue;
        }
        imshow(ptr->d_name, image_buf);
        images.push_back(image_buf);
        waitKey(30);

显示图片,将图片推入向量空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值