基于OpenCV的静态图像人脸识别

基于OpenCV的人脸识别,主要是用到了训练好的haarcascade_frontalface_default.xml文件,

这是OpenCV自带的开源库文件,只需要加载进程序之中即可。

程序如下:

#include <opencv2\opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

//训练文件路径
//Note:路径需要用双右下划线,即"\\"
string xmlPath = "F:\\OpenCV\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml";

int main(int argc,char** atgv) {
	Mat img = imread("face.jpg");
	imshow("input image", img);

	CascadeClassifier detector;
	detector.load(xmlPath);
	if (!detector.load(xmlPath))   //加载训练文件  
	{
		cout << "不能加载指定的xml文件" << endl;
		return -1;
	}
	vector<Rect> faces;
	detector.detectMultiScale(img, faces, 1.1, 3, 0, Size(30, 30));
	for (size_t t = 0; t < faces.size(); t++){
		rectangle(img, faces[t], Scalar(0, 0, 255), 2, 8);
	}
	imshow("Result", img);

	waitKey(0);
	return 0;
}
现象如下:


由图可知,这个训练文件还是有很大的误差,把海报上的文件“警用”也当成了人脸,

而且图片两边的半脸识别不出来,所有这个算法还有待改进。