首先,全部代码实现参考冰不语,感谢大佬提供代码(查看官网也可),帮助素人学习。
总的来说,当你走过一遍以后,会发现其实很简单,基本都是调用opencv库和opencv_contrib库,关于opencv_contrib的配置方法,优快云上真正对你路子的方法很少,所以建议初学者安装版本时,选择你参考的安装方法的版本,调试起来会更方便,如果你是3.3.0版本,需要配置contrib的话,可以私信我,我可以分享编译好的install文件给你,免除配置烦恼。
至于为什么写这篇文章,是应为冰不语的版本时opencv2.*的版本,自己再写3.3版本时,遇到很多坑,然后一一填满,所以避免opencv3新手入坑吧,写了这篇总结。
重点开始
- 数据准备 ORL人脸数据库,参考:人脸识别之一数据收集和预处理 本人数据准备:
#include <opencv2/opencv.hpp>;
#include <iostream>
using namespace cv;
using namespace std;
char ad[128] = { 0 };
int main()
{
vector<Rect> faces;
Mat image, image_gray;
for (int i = 1; i < 11; i++)
{
sprintf_s(ad, "你的照片路径(注意分割符用\\或者/)\\%d.jpg", i);
image = imread(ad);
cvtColor(image, image_gray, COLOR_BGR2GRAY);
equalizeHist(image_gray, image_gray);
CascadeClassifier face_cascade; //载入分类器
if (!face_cascade.load("分类器存放目录\\haarcascade_frontalface_alt.xml"))
{
cout << "Load haarcascade_frontalface_alt failed" << endl;
return 0;
}
vector<Rect> faceRect;
face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t j = 0; j < faceRect.size(); j+