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

33 篇文章 4 订阅
30 篇文章 5 订阅

基于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;
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值