【机器学习】最容易实现的基于OpenCV的人脸检测代码、检测器及检测效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyq_12/article/details/83343324

基于opencv自带的人脸检测模型,实现简单的人脸检测功能,可作为机器学习初学者练手使用。简单易学,具体的方法及代码如下。

1、运行结果

输入原图

输出结果

2、工程需要加载的opencv库如下:

3、用到的人脸检测器

4、具体实现代码

#include <opencv.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>

using namespace cv;
using namespace std;

#define  MULTI_TARGET  //控制切换检测目标数

int main()
{
	CascadeClassifier faceDetector;
	string faceCascadeFilename = "haarcascade_frontalface_default.xml";
	faceDetector.load(faceCascadeFilename);     //加载人脸检测器

	if (faceDetector.empty())
	{
		cout<<"load faceDetector failed!"<<endl;
		return -1;
	}

	Mat srcImg = imread("..\\srcImg.jpg");
	if(srcImg.empty())
	{
		cout<<"read image failed!"<<endl;
		return -1;
	}
	imshow("srcImg", srcImg);

	Mat grayImg;
	cvtColor(srcImg, grayImg, CV_RGB2GRAY);   //转成灰度图

	vector<Rect> detectionResults;
	float searchScaleFactor = 1.1f;
	int minNeighbors = 3;
	Size minFeatureSize(25, 25);

#ifdef MULTI_TARGET
	int flags = CASCADE_SCALE_IMAGE;	     //检测多个目标
#else
	int flags = CASCADE_FIND_BIGGEST_OBJECT|CASCADE_DO_ROUGH_SEARCH;	//只检测最大目标
#endif

	faceDetector.detectMultiScale(grayImg, detectionResults, searchScaleFactor, minNeighbors, flags, minFeatureSize);  //进行人脸检测

	Mat dstImg = srcImg.clone();
	Mat detectionRect;
	for (int i = 0; i < detectionResults.size(); i++)
	{
		if (detectionResults[i].height > 0 && detectionResults[i].width > 0)
		{
			detectionRect = grayImg(detectionResults[i]);
			rectangle(dstImg, detectionResults[i], CV_RGB(0, 255, 0), 2, 8, 0);   //画检测框
		}
	}

	imshow("dstImg", dstImg);
	waitKey(0);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lyq_12/article/details/83343324