之前我们做了第一个C++程序,中间有opencv的测试,这个在opencv入门教程中有,很详细。我这里印象深刻的几个错误给大家列出来,如果有同类错误可以参考一下。
第一,是程序输入后记得打上#include "stdafx.h"这句话;
第二,是测试用的图片记得放在可执行程序的目录下。这个意思就是说比如你的工程名叫opencv,那么打开这个工程文件夹,里面有一个也叫opencv的文件夹,打开,把图片放在这里面才能正常运行;
第三,如果调试不成功,可以切换一下Debug和Release模式,我是一开始debug不成功,切换release又不成功,再次换回debug之后莫名其妙成功了。
接下来进入正文就是我们今天的主题,人脸检测。我们的大作业要求是,要有八张照片,四个人每个人分别两张,给出其中一张,要从剩下的七张中找到另一张同一个人。那么想要实现识别,首先需要检测对吧,所以我们一步一步来,今天先做成检测部分。
首先还是从网上参考一些代码。当然,这部分是必须能看懂每一步是什么意思,不能就直接去抄。代码这部分我就不提供了,毕竟网上有很多。
接下来是重点!首先 一定要把分类器事先拷贝到工程目录中。我本人一开始就是因为少了这一步,导致程序虽然可以无差错编译运行,但是秒退,根本显示不出来图像。之后找了半天发现问题是这一步。那么如果有闪退的同学可以参照这一步。分类器默认是在*\opencv\sources\data\haarcascades
拷贝到可执行文件的目录下,像这样:
接下来测试,点击运行:
如果发现这一步,那么恭喜你程序没问题,完成了。但是我使用的是带眼部检测的,但是检测率比较低,可能和测试的图片有眼镜有关,所以并未显示出来。但是呢,我也不是一次成功的,中途会出现没有篮框出现的情况。据我测试多次后发现可能是因为图片大小的原因。上面的图片只有4.86kb,如果大家想要测试尽量照片大小小一点,还有就是干扰少一点,比如只要白墙做背景。