OpenCV练习之路-面部识别第三部分识别您的面部

电脑杂谈  发布时间:2020-03-22 07:03:18  来源:网络整理

opencv人脸检测例子_opencv人脸检测不准确_opencv 人脸检测

在之前的两个OpenCV练习博客中(人脸识别和数据预处理以及OpenCV练习),人脸识别第二模型培训中opencv 人脸检测,这两个博客介绍了人脸识别的整个过程. 明确. 包括今天的面部识别在内,它已反映在第二个博客的代码中. 只是今天的内容将使结果更加直观. 而已. 可以说,本文的内容是许多以前内容的结合. 所以今天的内容也很简洁.

简单解释一下过程:

opencv 人脸检测_opencv人脸检测不准确_opencv人脸检测例子

1. 打开相机.

2. 加载面部检测器和面部模型.

opencv 人脸检测_opencv人脸检测例子_opencv人脸检测不准确

3. 人脸检测

4. 将检测到的脸部与脸部模型进行比较,以找出脸部是谁.

opencv人脸检测不准确_opencv 人脸检测_opencv人脸检测例子

5. 如果您的面孔是您自己的面孔,请显示您自己的名字.

代码:

opencv 人脸检测_opencv人脸检测例子_opencv人脸检测不准确

#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
	VideoCapture cap(0);    //打开默认
	if (!cap.isOpened())
	{
		return -1;
	}
	Mat frame;
	Mat edges;
	Mat gray;
	CascadeClassifier cascade;
	bool stop = false;
	//训练好的文件名称,放置在可执行文件同目录下
	cascade.load("haarcascade_frontalface_alt.xml");
	Ptr<FaceRecognizer> modelPCA = createEigenFaceRecognizer();
	modelPCA->load("MyFacePCAModel.xml");
	
	while (!stop)
	{
		cap >> frame;
		//建立用于存放人脸的向量容器
		vector<Rect> faces(0);
		cvtColor(frame, gray, CV_BGR2GRAY);
		//改变图像大小,使用双线性差值
		//resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);
		//变换后的图像进行直方图均值化处理
		equalizeHist(gray, gray);
		cascade.detectMultiScale(gray, faces,
			1.1, 2, 0
			//|CV_HAAR_FIND_BIGGEST_OBJECT
			//|CV_HAAR_DO_ROUGH_SEARCH
			| CV_HAAR_SCALE_IMAGE,
			Size(30, 30));
		Mat face;
		Point text_lb;
		for (size_t i = 0; i < faces.size(); i++)
		{
			if (faces[i].height > 0 && faces[i].width > 0)
			{
				face = gray(faces[i]);
				text_lb = Point(faces[i].x, faces[i].y);
				rectangle(frame, faces[i], Scalar(255, 0, 0), 1, 8, 0);
			}
		}
		Mat face_test;
		int predictPCA = 0;
		if (face.rows >= 120)
		{
			resize(face, face_test, Size(92, 112));
			
		}
		//Mat face_test_gray;
		//cvtColor(face_test, face_test_gray, CV_BGR2GRAY);
		if (!face_test.empty())
		{
			//测试图像应该是灰度图
			predictPCA = modelPCA->predict(face_test);
		}
		cout << predictPCA << endl;
		if (predictPCA == 40)
		{
			string name = "LiuXiaoLong";
			putText(frame, name, text_lb, FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255));
		}
		imshow("face", frame);
		if (waitKey(50) >= 0)
			stop = true;
	}
	return 0;
}

效果图:

---------------------------------------------------

更新: opencv3版本的代码已更改opencv 人脸检测,请参阅较新的博客提示.

---------------------------------------------------


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-148043-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 文成帝冯跋
        文成帝冯跋

        看做事一种反社会行为呢

      • 黄公略
        黄公略

        包括军舰

      • 兰艳
        兰艳

        今天用了十几个小时就没电了

      热点图片
      拼命载入中...