人脸检测-opencv_haar

// FaceD.cpp : 
//
// 人脸检测C++版本
// Editor:LinJM
//

#include "stdafx.h"
#include <cstdio>
#include <cstdlib>
#include <Windows.h>
#include <vector>
#include <iostream>
#include <string>
#include <windows.h>
#include <opencv2\opencv.hpp>


using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{

	//加载Haar特征检测分类器
	const string CascadeFileName = "D:\\Program Files\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml";
	CascadeClassifier cascade = CascadeClassifier::CascadeClassifier(CascadeFileName);//可以选择LBP特征。

	// 载入图像
//	const string pstrImageName = "E:\\人脸识别\\c++\\face_haar\\12.jpg";
	const string pstrImageName = "I:\\照片\\毕业照\\照片1\\IMG_20170620_091759.jpg";

	Mat SrcImage = imread(pstrImageName, CV_LOAD_IMAGE_COLOR);
	Mat GrayImage;
	imshow("原图",SrcImage);
	
	waitKey(10);


	cvtColor(SrcImage, GrayImage, CV_BGR2GRAY);

	// 人脸识别与标记
	if (!cascade.empty())  //测试检测器是否已加载
	{
		CvScalar FaceCirclecolors[] =
		{
			{ { 0, 0, 255 } },
			{ { 0, 128, 255 } },
			{ { 0, 255, 255 } },
			{ { 0, 255, 0 } },
			{ { 255, 128, 0 } },
			{ { 255, 255, 0 } },
			{ { 255, 0, 0 } },
			{ { 255, 0, 255 } }
		};

		vector<cv::Rect> faces;

		DWORD dwTimeBegin, dwTimeEnd;
		dwTimeBegin = GetTickCount();//GetTickCount是一种函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。
		// 识别
		cascade.detectMultiScale(GrayImage, faces,1.1,30,0,cv::Size(5,5));//参数给到60都可以识别
		dwTimeEnd = GetTickCount();
		
		cout << "人脸个数:" << faces.end() - faces.begin()
			<< "识别用时:" << dwTimeEnd - dwTimeBegin << "ms\n";
		// 标记
		int n = 0;
		for (vector<cv::Rect>::const_iterator i = faces.begin(); i <faces.end(); i++, n++)
		{
			Point center;
			int radius;
			center.x = cvRound((i->x + i->width * 0.5));
			center.y = cvRound((i->y + i->height * 0.5));
			radius = cvRound((i->width + i->height) * 0.25);
			circle(SrcImage, center, radius, FaceCirclecolors[n % 8], 2);
		}
	}
	namedWindow("人脸识别", CV_WINDOW_NORMAL);
	imshow("人脸识别", SrcImage);

	cvWaitKey(0);

	return 0;
}


函数解释:

opencv官方解释:https://docs.opencv.org/2.4.13/modules/objdetect/doc/cascade_classification.html?highlight=detectmultiscale



CascadeClassifier 
类CascadeClassifier 
级联分类器类用于对象检测
CascadeClassifier :: CascadeClassifier 
从文件加载分类器。

C ++:CascadeClassifier :: CascadeClassifier (常量字符串和文件名) 
Python:cv2。CascadeClassifier ([文件名] ) →<CascadeClassifier对象> 
参数:	filename - 加载分类器的文件的名称。


CascadeClassifier :: detectMultiScale 
检测输入图像中不同大小的对象。检测到的对象作为矩形列表返回。

C ++: void CascadeClassifier :: detectMultiScale( const Mat&image,vector <Rect>&objects,double scaleFactor = 1.1,int minNeighbors = 3,int flags = 0,Size minSize = Size(),Size maxSize = Size())
Python:cv2.CascadeClassifier。detectMultiScale(图像[,比例因子[,minNeighbors [,旗帜[,minSize属性[,MAXSIZE ] ] ] ] ] ) →对象
Python:cv2.CascadeClassifier。detectMultiScale( image,rejectLevels,levelWeights [,scaleFactor [,minNeighbors [,flags [,minSize [,maxSize [,outputRejectLevels ] ] ] ] ] ] ) →objects
C: CvSeq * cvHaarDetectObjects ( const CvArr * image,CvHaarClassifierCascade * cascade,CvMemStorage * storage,double scale_factor = 1.1,int min_neighbors = 3,int flags = 0,CvSize min_size = cvSize(0,0),CvSize max_size = cvSize(0 ,0))
Python:cv。HaarDetectObjects (图像,级联,存储,scale_factor = 1.1,min_neighbors = 3,标志= 0,MIN_SIZE =(0,0) ) →detectedObjects 
参数:	
级联 - 哈尔分类器级联(仅OpenCV 1.x API)。它可以使用Load()从XML或YAML文件加载。当级联不再需要时,使用cvReleaseHaarClassifierCascade(&cascade)释放它。
图像 - CV_8U类型的矩阵, 其中包含检测对象的图像。
对象 - 矩形的矢量,其中每个矩形包含检测到的对象。
scaleFactor - 指定在每个图像比例缩小图像大小的参数。
minNeighbors - 指定每个候选矩形必须保留多少个邻居的参数。
标志 - 与旧函数cvHaarDetectObjects相同的参数。它不用于新的级联。
minSize - 最小可能的对象大小。小于这个值的对象被忽略。
maxSize - 最大可能的对象大小。大于此的对象将被忽略。
该功能与TBB库并行。

注意
(Python)使用级联分类器的人脸检测示例可以在opencv_source_code / samples / python2 / facedetect.py








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值