非GPU版的人脸检测器总结(Non-GPU Face Detection)

1. opencv自带的级联人脸检测器

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/objdetect/objdetect.hpp>
using namespace std;
using namespace cv;

int main()
{
	//VideoCapture capture(0);
	string face_cascade_name = "D:\\Program Files\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt2.xml";

	CascadeClassifier face_cascade;
	Mat frame;
	if (!face_cascade.load(face_cascade_name))
	{
		cout << "load failed" << endl;
		return 0;
	}
	cv::VideoCapture cap(0 + cv::CAP_DSHOW);
	while (cap.isOpened())
	{
		cap >> frame;
		
		vector<Rect> faces;
		Mat frame_gray;
		vector<Mat> rois;
		cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
		equalizeHist(frame_gray, frame_gray);
		face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
		for (auto iter = faces.begin(); iter != faces.end(); iter++)
		{
			rectangle(frame, *iter, Scalar(0, 0, 255), 2);
			//rois.push_back(frame(*iter).clone());
			rois.push_back(frame(*iter));
		}
		for (auto iter = rois.begin(); iter != rois.end(); iter++)
		{
			int rows = iter->rows;
			int cols = iter->cols*iter->channels();
			for (int i = 0; i < rows; i++)
			{
				uchar* data = iter->ptr<uchar>(i);
				for (int j = 0; j < cols; j++)
				{
					data[j] = saturate_cast<uchar>(data[j] * 1.1 + 68);
				}
			}
		}
		for (int i = 0; i < rois.size(); i++)
		{
			Mat roi;
			GaussianBlur(rois[i], roi, Size(5, 5), 0, 0);
			Mat roi1;
			bilateralFilter(roi, roi1, 30, 30 * 2, 30 / 2);  //双边滤波
			Mat matFinal;
			GaussianBlur(roi1, matFinal, Size(0, 0), 9);
			addWeighted(roi1, 1.5, matFinal, -0.5, 0, rois[i]);   //这一步相当于非掩膜锐化
			string win_name = "faces_" + to_string(i + 1);
			imshow(win_name, rois[i]);
		}
		imshow("source", frame);
		waitKey(1);
	}
	
	return 0;
}

2. opencv版本的centerface

prg-opencv-cpp

3. libfacedetection

https://github.com/ShiqiYu/libfacedetection

4. ncnn版本的retinaface

https://github.com/Tencent/ncnn/blob/master/examples/retinaface.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值