人脸检测-opencv_haar
2017-11-23 20:54
375 查看
// 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
相关文章推荐
- OpenCV中Haar-like特征人脸检测函数介绍
- opencv人脸检测(haar特征+AdaBoos分类器)(一)
- OpenCV中基于Haar特征和级联分类器的人脸检测
- opencv中haar特征检测人脸(适合小白)
- opencv 利用类haar小波特征的人脸、人眼等特征检测(带代码)
- 用opencv自带的Haar分类器进行人脸检测(一)
- 基于Haar分类器的OpenCV人脸检测实例
- OpenCV学习笔记:基于Haar特征的人脸检测
- OpenCVForUnity使用Haar分类器检测人脸和眼睛
- 【转载】浅谈OpenCV人脸检测以及两个函数cvHaarDetectObjects和cvRunHaarClassifierCascade
- 人脸检测原理及示例(OpenCV+Python) haar特征 adaboost
- 【OpenCV】浅析人脸检测之Haar分类器方法
- 人脸检测——OpenCV的分类器的haar特征数据
- 【人脸检测】OpenCV中的Haar+Adaboost级联分类器分解(一):Haar特征介绍
- 用opencv自带的Haar分类器进行人脸检测(二)
- 【OpenCV之Haar特征检测人脸识别】
- 利用OpenCV的级联分类器类CascadeClassifier和Haar特征实现人脸区域的检测
- openCV|Haar人脸检测与提取
- 利用OpenCV的Haar特征目标检测方法进行人脸识别的尝试(一)
- OpenCV图像特征提取与检测C++(七) 级联分类器 HAAR与LBP– 人脸检测(图像和视频)