OpenCV3实现人脸识别(两个)-采集要识别的人脸数据

优采云 发布时间: 2020-08-06 22:14

  前言

  1. 上一篇博客文章演示了如何使用OpenCV内置的面部和眼睛级联分类器检测图像中的面部,此处将演示如何打开连接到计算机的相机并检测面部,然后保存照片. 接下来,它将用作面部识别的训练数据.

  2. 我的编程环境是Windows 7 64位,IDE是VS2015,配置了OpenCV3.3和OpenCV_Contrib,其中Boost 1.66用于配置文件和目录,因此,如果配置上述环境,则可以阅读博客文章. 我以前写过.

  I. 处理官方数据

  1. 下载OpenCV的官方面孔数据. 官方人脸数据提供了总共40个人的面孔,这些面孔被分类到文件目录中. 每个人有10个面部数据,格式为pgm. ,无法通过PC上的查看软件打开Pgm格式,但是您可以使用OpenCV编写一个小程序来查看其中的内容. csdn的下载地址是: . 下载后,它看起来像这样:

  

  每个文件夹收录10个面部数据,格式为pgm,大小为92X112.

  

  2. 编写函数以查看每个类别的面部数据. 这里,boost库的文件操作类别用于递归遍历每个子目录中的图像数据并显示它.

  (1)功能代码

  /显示目标路径下的所有图像

void showImage(string image_path)

{

//判断是事为文件夹

if (!fs::is_directory(image_path))

{

Mat image = imread(image_path);

if (!image.empty())

{

imshow(image_path, image);

waitKey(0);

}

}

else if(fs::is_directory(image_path))

{

fs::recursive_directory_iterator begin_iter(image_path);

fs::recursive_directory_iterator end_iter;

for (; begin_iter != end_iter; begin_iter++)

{

string file_name = begin_iter->path().string();

if (!fs::is_directory(file_name))

{

Mat image = imread(file_name);

if (!image.empty())

{

imshow(file_name, image);

waitKey(30);

}

}

}

}

}

  (2)打开一组数据,您可以看到其中的面部,并且正*敏*感*词*有各种角度,因此在输入要识别的面部时,我们可以从官方角度尽可能地学习.

  

  二,采集要识别的人脸数据

  采集要识别的面部数据. 您可以从图像集合中检测面部,也可以从USB相机或笔记本计算机随附的相机检测面部. 此处给出的代码是从相机检测面部,然后对其进行拦截,将其更改为与官方面部图像大小相同的数据,然后保存.

  1. 使用OpenCV人脸检测级联分类器来检测人脸,如果它检测到当前视频中只有一个人脸,则使用眼睛分类器来检测该人脸是否可以完全检测到两只眼睛,如果可以同时检测到两只眼睛时间,按p键拍照并保存. 保存10张以上的面孔并退出.

<p>void photograph(string save_path,int _cap)

{

int image_number = 0;

if (!face_detector.load(face_path))

{

std::cout

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线