C++ OpenCV【人脸识别&人眼识别】

         此文章仅对人脸位置进行检测,使用haar级联的方法[OpenCV自带]

#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
#include <cstdio>
using namespace std;
using namespace cv;

//定义7种颜色,用于标记人脸
Scalar colors[] =
{
	//红橙黄绿青蓝紫【RGB】
	CV_RGB(255, 0, 0),
	CV_RGB(255, 97, 0),
	CV_RGB(255, 255, 0),
	CV_RGB(0, 255, 0),
	CV_RGB(0, 255, 255),
	CV_RGB(0, 0, 255),
	CV_RGB(160, 32, 240)
};

int main()
{
	//读取训练器 haar
	CascadeClassifier classifier_face;
	string haarfileFace = "D:\\Library\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml";//【[opencv安装地址]\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml】
	CascadeClassifier classifier_eye;
	string haarfileEye = "D:\\Library\\opencv\\build\\etc\\haarcascades\\haarcascade_eye.xml";

	if (!classifier_face.load(haarfileFace))//加载文件
	{
		cout << "coulud not load face image..." << endl;
		return -1;
	}
	if (!classifier_eye.load(haarfileEye))
	{
		cout << "coulud not load eye image..." << endl;
		return -1;
	}

	Mat srcImage, grayImage, grayImage1, dstImage;
	srcImage = imread("rg.png");//读取图片
	/*imshow("原图", srcImage);
	waitKey(0);*/
	dstImage = srcImage.clone();//复制一张图片
	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);//生成灰度图 提高检测效率

	//检测人脸
	vector<Rect> faceRect;
	classifier_face.detectMultiScale(grayImage, faceRect, 1.1, 3, 0);//调用分类器对象
	cout << "检测到人脸个数:" << faceRect.size() << endl;
	
	if (faceRect.size())
	{
		for (int i = 0; i < faceRect.size(); i++)
		{
			cv::rectangle(dstImage, faceRect[i], Scalar(0, 0, 255), 2);//标记--在脸部画矩形
			//Point center;
			//int radius;
			//center.x = cvRound((faceRect[i].x + faceRect[i].width * 0.5));
			//center.y = cvRound((faceRect[i].y + faceRect[i].height * 0.5));
			//radius = cvRound((faceRect[i].width + faceRect[i].height) * 0.25);
			//circle(dstImage, center, radius, colors[i % 7], 3);//标记--在脸部画圆(画矩形和画圆二选一)
			
			//在人脸图像中检测人眼和嘴巴
			Mat faceimg = dstImage(faceRect[i]);//获取人脸矩形图像
			/*imshow("faceimg", faceimg);
			waitKey(0);*/
			cvtColor(faceimg, grayImage1, COLOR_BGR2GRAY);
			//检测眼睛和嘴巴
			vector<Rect> eyeRect;
			classifier_eye.detectMultiScale(grayImage1, eyeRect, 1.1, 3, 0);
			if (eyeRect.size())
			{
				for (int j = 0; j < eyeRect.size(); j++)
				{
					标记--在眼部画矩形
					//Rect tmpRect;
					//tmpRect.x = faceRect[i].x + eyeRect[j].x;
					//tmpRect.y = faceRect[i].y + eyeRect[j].y;
					//tmpRect.width = eyeRect[j].width;
					//tmpRect.height = eyeRect[j].height;
					//cv::rectangle(dstImage, tmpRect, Scalar(255, 0, 0));
					
					//标记--在眼部画圆(画矩形和画圆二选一)
					Point centerEye;
					int radiusEye;
					centerEye.x = cvRound((faceRect[i].x + eyeRect[j].x + eyeRect[j].width * 0.5));
					centerEye.y = cvRound((faceRect[i].y + eyeRect[j].y + eyeRect[j].height * 0.5));
					radiusEye = cvRound((eyeRect[j].width + eyeRect[j].height) * 0.25);
					circle(dstImage, centerEye, radiusEye, colors[i % 7], 2);
				}
			}
		}
	}
	imwrite("rgDetect.png", dstImage);
	//显示最终检测结果
	imshow("【人脸识别detectMultiScale】", dstImage);
	waitKey(0);

	system("pause");
	return 0;
}

        找茬:火箭少女少了一人

        Haar级联预训练模型

 

 

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV人脸识别毕业设计是基于OpenCV库和人脸识别算法,实现了对图像或视频中人脸的自动检测和识别。在毕业设计中,我首先学习了OpenCV库的基本知识,并研究了人脸检测与识别的原理和算法。 首先,我使用OpenCV的人脸检测器进行人脸的自动检测。通过使用分类器来检测出图像中的人脸区域,然后对检测到的人脸进行标记和定位。 然后,我利用OpenCV中的人脸识别算法,对检测到的人脸进行特征提取和比对。常用的人脸识别算法有Eigenfaces、Fisherfaces和LBPH(局部二值模式直方图)。通过训练样本集,构建人脸特征空间,并将测试样本与已知特征空间进行比对,得出相似度或识别结果。 在毕业设计中,我将创建一个图形界面,提供用户友好的操作,可以选择输入图像或视频,然后通过调用OpenCV人脸识别函数库,实现对输入数据的人脸检测和识别。通过界面可以实时显示检测到的人脸,以及识别结果或相似度。 为了进一步提高识别准确率和效率,我将采用一些优化方法,如调整分类器的参数,增加训练样本的数量和质量,对人脸图像进行预处理等。此外,我还将进行性能测试,评估人脸识别系统的准确度、召回率、误识率等指标。 通过这个毕业设计,我希望能深入了解和掌握计算机视觉中的人脸识别技术,并通过实际应用中的设计与实现,提高对相关算法和库的理解和应用能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值