C++开发人脸性别识别教程
文章平均质量分 93
使用OpenCv,在MFC框架下开发的一个简易的人脸性别识别教程,大约有20篇博文组成,图文并茂,介绍较为详细。
山在岭就在
天道酬勤
展开
-
C++开发人脸性别识别总结
历时一个月,终于在昨天把《C++开发人脸性别识别总结》系列博客完成了,第一篇博客发表在2015年12月29日,截止昨天2016年2月29日最后一篇完成,去除中间一个月的寒假,正好一个月,首先这里把这系列博客的地址呈上:C++开发人脸性别识别教程。 在发牢骚之前首先强调几个重要问题: (1)在程序中存在一个小的易触发的BUG,就是”初始化“按钮对应的事件触发函数OnBnClickedButt...原创 2016-03-01 20:40:36 · 7857 阅读 · 5 评论 -
C++开发人脸性别识别教程(19)——界面美化
在这篇博文中将完成《C++开发人脸性别识别》的收尾工作,主要内容分为两部分:添加视频暂定功能、界面规范化。 一 视频暂停功能 严格来说这个视频暂定功能算是视频人脸性别识别的一个遗留问题,本应加在C++开发人脸性别识别教程(16)——视频人脸性别识别这篇博文中,这里将其补上,具体功能就是在对摄像头采集的视频进行人脸检测、性别识别时,能够通过一个“暂停”按钮来对程序进行控制,实现程序的开始和中...原创 2016-02-29 21:29:59 · 5436 阅读 · 7 评论 -
C++开发人脸性别识别教程(18)——辅助功能之文件名批量修改、方法验证
时光推移了30多天,这个人脸性别识别的小项目也接近尾声了,预计再通过三篇博文的篇幅来完成这个项目的收尾工作。在这篇博文中我们再为程序添加另外两个小的辅助功能:文件名批量修改、方法验证。 一 文件名批量修改 批量修改文件名是一件很基础也很常用的小操作,核心操作就是图像文件的批量读取、批量改名、批量保存。基本思想就是把文件读出来,然后在保存回去(注意不要和别的文件发生覆盖),从这个角度来讲文件...原创 2016-02-29 20:16:14 · 3907 阅读 · 2 评论 -
C++开发人脸性别识别教程(17)——辅助功能之人脸批量分割
在之前的博文中已经将性别识别部分叙述的基本完整,整个程序的开发也接近尾声,在这篇博文中我们再为程序添加小的辅助功能:人脸批量分割。 一、人脸批量分割 在前面的博文中提到过,进行性别识别训练所用到的训练样本是分割好的男性人脸样本和女性人脸样本,那么如何去制作这些训练样本呢?这就需要进行人脸图像的批量人脸分割。 1.1 添加控件 首先添加一个“人脸批量分割”的按钮,ID采用默认值即可: ...原创 2016-02-29 15:03:30 · 4811 阅读 · 2 评论 -
C++开发人脸性别识别教程(16)——视频人脸性别识别
在之前的博文中我们已经能够顺利驱动摄像头来采集源图像,在这篇博文中将正式为其加入性别识别的代码,实现摄像头视频的人脸性别识别。 一、人脸检测 在得到摄像头采集的源图像之后,首先要做的就是对其进行人脸检测,将人脸区域分割出来。这步相对来说比较简单,只需在定时器时间触发函数中加入人脸检测的代码即可,这里给出OnTimer()函数的整体代码:void CGenderRecognitionMFCD...原创 2016-02-27 22:10:21 · 7868 阅读 · 11 评论 -
C++开发人脸性别识别教程(15)——搭建MFC框架启动摄像头
在之前的博文中已经完成了针对图片的人脸性别识别功能,在这篇文章中我们开始引入摄像头设备,为程序添加第二个功能:视频人脸性别识别。 一、添加控件 这里需要新添加两个与视频人脸性别识别相关的功能控件,一个是“打开视频”按钮(ID为IDC_OpenVideo),一个是“暂停按钮”按钮。为了适当减少主窗口中的按钮控件的数量,这里再次采用一种复用策略,即将视频识别模式中的“暂停”功能与之前图片文件夹...原创 2016-02-27 09:19:31 · 7019 阅读 · 12 评论 -
C++开发人脸性别识别教程(14)——灰度图像识别BUG处理
在这篇博客中,我们对目前程序中一个隐藏很深的BUG进行处理,这个BUG导致程序目前有一部分逻辑出现错误(虽然没有表现出来)。 一、触发BUG 1、准备触发样本 为了复现这个隐藏的BUG,需要实现准备两张测试样本,一张是彩色图(三通道图),一张是灰度图(单通道图): 临时读入这两个图像,验证其属性: 注意此时程序能够正常读取这两个图片,不会崩溃。 2、修改代码,触发BUG 解析来我...原创 2016-01-20 21:27:57 · 5014 阅读 · 2 评论 -
C++开发人脸性别识别教程(13)——针对单张图片的性别识别
在之前的博文中我们的性别识别程序已经初步成型,能够识别某个文件夹下的图片文件。不过这里有一个问题,假设这个文件夹下有着大量的图片,而我们希望识别这些图片中的某一张,此时需要我们不停的单击“下一张”按钮才会轮询到对应的图片,这是相当麻烦的,因此在这篇博客中我们向程序中添加一个功能——单张图片的性别识别。 一、基本思想 最基本的办法就是在主界面再添加一个按钮控件,命名为“图片文件”(之前的按钮...原创 2016-01-18 21:46:10 · 5147 阅读 · 0 评论 -
C++开发人脸性别识别教程(12)——添加性别识别功能
经过之前几篇博客的讲解,我们已经成功搭建了MFC应用框架,并实现了基本的图像显示和人脸检测程序,在这篇博文中我们要向其中添加性别识别代码。 关于性别识别,之前已经专门拿出两篇博客的篇幅来进行讲解,这里不再赘述,具体参见:C++开发人脸性别识别教程(5)——通过FaceRecognizer类实现性别识别和C++开发人脸性别识别教程(6)——通过SVM实现性别识别。 一、分类器训练 在进行人...原创 2016-01-17 11:24:17 · 6168 阅读 · 0 评论 -
C++开发人脸性别识别教程(11)——图片人脸检测程序BUG处理
在这篇博客需要解决之前遗留的两个BUG,一是用户在不初始化条件下运行程序,二是人脸检测的误差结果。 一、添加初始化警告 目前我们在“初始化”按钮对应的响应函数中封装了人脸分类器加载、开辟内存等操作: 因此,如果用户在未单击“初始化”按钮的情况下进行图片读入,人脸检测,程序就会因为缺少人脸检测器而崩溃,因此我们向CGenderRecognitionMFCDlg类中添加一个布尔类型的标志位用于指原创 2016-01-13 22:02:16 · 4126 阅读 · 1 评论 -
C++开发人脸性别识别教程(10)——添加图片的人脸检测程序
如今我们的MFC框架已经初具规模,能够读取并显示文件夹下的图片,在这篇博文中我们将向其中添加人脸检测的程序。 一、人脸检测算法 这里我们使用OpenCv封装的Adaboost方法来进行人脸检测,参见:C++开发人脸性别识别教程(4)——OpenCv的人脸检测函数 二、初始化 1、添加初始化按钮 在进行人脸检测之前需要初始化一些相关变量,例如开辟内存,加载检测器等等。首先,我们为MFC框架原创 2016-01-12 22:06:01 · 6300 阅读 · 7 评论 -
C++开发人脸性别识别教程(9)——搭建MFC框架之显示图片
在之前的博客中我们已经实现读取用户选定的文件夹,并将其路径保存在相应的变量中,在这篇博文中我们将介绍如何借助CvvImage类将图片显示在picture控件中,并自动读取文件夹下的其他图片。 一、添加“下一张”按钮 由于我们需要读取文件夹下的所有图像文件,而非某一张文件,因此有必要添加一个按钮来进行控制,具体功能就是:每单击一次这个按钮,程序就会自动读取下一张图片并显示在界面上。由于之前已经详原创 2016-01-11 21:41:18 · 11533 阅读 · 44 评论 -
C++开发人脸性别识别教程(8)——搭建MFC框架之读取文件夹信息
在上一篇博客中我们已经绘制了MFC界面,在这篇博客中我们将添加响应代码,为MFC框架添加一个最基本的功能:打开一个文件夹。 一、添加相关头文件 这里头文件主要包含三类:opencv头文件、批量读取文件相关的头文件、CvvImage。这里需要强调CvvImage这个头文件,这个是用来关联OpenCv和picture控件,并且这个头文件是隶属于OpenCv1.x的,在2.x版本中已原创 2016-01-09 12:50:54 · 7932 阅读 · 42 评论 -
C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
在之前的博客中我们已经将项目中用到的算法表述完毕,包括人脸检测算法以及四种性别识别算法,在这篇博客中我们将着手搭建基本的MFC框架。 一、框架概况 在这篇博文中我们将搭建最基本的MFC框架,绘制MFC界面。 二、搭建流程 1、新建一个MFC工程并配置OpenCv 打开VS,按下“ctrl+n”,在新建窗口中选择“MFC应用程序”,命名为Gender原创 2016-01-08 19:43:03 · 7499 阅读 · 0 评论 -
C++开发人脸性别识别教程(6)——通过SVM实现性别识别
上一篇教程中我们介绍了如何使用OpenCv封装的FaceRecognizer类实现简单的人脸性别识别,这里我们为大家提供另外一种基本的性别识别手段——支持向量机(SVM)。 支持向量机在解决二分类问题方面有着强大的威力(当然也可以解决多分类问题),性别识别是典型的二分类模式识别问题,因此很适合用SVM进行处理,同时OpenCv又对SVM进行了很好的封装,调用非常方便,因此我们在这个性别识原创 2016-01-08 09:37:21 · 15188 阅读 · 17 评论 -
C++开发人脸性别识别教程(5)——通过FaceRecognizer类实现性别识别
在之前的博客中已经解决了人脸检测的问题,我们计划在这篇博客中介绍人脸识别、性别识别方面的相关实现方法。 其实性别识别和人脸识别本质上是相似的,因为这里只是一个简单的MFC开发,主要工作并不在算法研究上,因此我们直接将性别识别视为一种特殊的人脸识别模式。人脸识别可能需要分为几十甚至上百个类(因为有几十甚至上百个人),而性别识别则是一种特殊的人脸识别——只有两个类。 一、基本工具原创 2016-01-04 22:11:55 · 17536 阅读 · 29 评论 -
C++开发人脸性别识别教程(4)——OpenCv的人脸检测函数
这个项目主要包含三部分:人脸检测、特征提取、性别分类: 这篇博客中我们重点介绍OpenCv的人脸检测函数。这篇博客我们先不提MFC,而是在win32控制台下编写一段人脸检测的程序。 一、开启摄像头 我们先讲解如何通过摄像头来采集图像,这听起来更有实际意义。 1、新建工程并配置OpenCv(注意工程类型选择win32控制台应用程序):原创 2015-12-31 09:35:15 · 18057 阅读 · 33 评论 -
C++开发人脸性别识别教程(3)——OpenCv配置和ImageWatch插件介绍
OpenCv是C++图像处理的重要工具,这个人脸性别识别的项目就是借助OpenCv进行开发的。虽然网上已经有了很多关于OpenCv的配置教程,但出于教程完整性考虑,这里还是用专门的一篇博客来介绍OpenCv的具体配置方法,同时也介绍一下OpenCv中的一个强有力的图像处理插件——ImageWatch。 由于这个程序是一年前写的,当时的OpenCv的最新版本为2.4.9(现在已经更新到了3.0原创 2015-12-30 15:46:19 · 12091 阅读 · 8 评论 -
C++开发人脸性别识别教程(2)——VisualStudio初探
上一篇教程中已经大致描述了项目的最终效果,考虑到读者中有很多零基础的同学,我们这里并不急于进行代码的编写,而是先简要介绍下所用到的开发工具——VisualStudio2012。 VisualStudio是微软推出的非常强大的开发软件,在C++开发领域可谓占据了半壁江山。VisualStudio经典版本主要有2005、2008、2010、2012、2013、2015等版本。2005和2008现原创 2015-12-30 15:15:43 · 8784 阅读 · 1 评论 -
C++开发人脸性别识别教程(1)——前瞻
大四暑假的时候,帮老师指导了一个本科大学生创新实验,主要目标是通过图像处理相关技术对人脸美丽度进行分类。其中一个很重要的环节就是人脸的性别识别,这里将这个部分单独拿出来,借住OpenCv这个开源的图像处理库,在MFC框架下编写了一个人脸性别识别的程序,本套教程将详细介绍编写过程。 需要提前说的一点是这个程序是在大四的时候编写的,当时自己还没有正式的进行图像处理方面的研究,编程经验也不够丰原创 2015-12-30 11:15:30 · 12130 阅读 · 0 评论