人脸检测
*开发环境为visual studio2010*使用的是opencv中的Haart特征分类器,harr Cascades*检测对象为视频中的人脸
一:主要步骤
1.加载分类器,将人脸检测分类器和笑脸检测分类器放在项目目录中去 2.调用detecMutiScale()函数检测,对函数中相关的参数进行修改调整, 是检测的结果更加精确 3.打开摄像头或者视频文件,把检测到的人脸用矩形画出来 opencv中用来做目标检测的级联分类器的一个
类,其结构如下: The constructor for the cv::CascadeClassifier object is: cv::CascadeClassifier::CascadeClassifier( const String& filename ); 这个构造函数只需要一个参数,即存储xml文件的名字,此外还有一个默认参数,即是使用 load()成员加载级联。二:代码
/*************************************************************** 主要步骤: 1.将人脸检测分类器放在项目目录中去,加载Haart特征分类器(描述人体各个部位的Haar特征值,包括人脸、眼睛、嘴唇等) 2.调用detecMutiScale()函数检测,对函数中相关的参数进行修改调整 3.打开摄像头或者视频文件把检测到的人脸用矩形画出来 ****************************************************************/ #include "opencv2/objdetect.hpp" #include "opencv2/videoio.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; using namespace cv; String Path_faceCascade; //定义xml文件路径,训练模型以xml文件格式保存 CascadeClassifier faceCascade; //定义人脸分类器,opencv中的harr Cascades int main() { Path_faceCascade = "models/haarcascade_frontalface_default.xml"; //导入xml文件,给Path_faceCascade if( !faceCascade.load( Path_faceCascade ) ) { printf("--(!)Error loading face cascade\n"); return -1; } VideoCapture cap; Mat img, imgGray; std::vector<Rect> faces; cap.open(0); //打开摄像头 //cap.open("../data/test.avi"); //打开视频 int c = 0; if(!cap.isOpened()){ return 1; } while(c!=27) { cap>>img; cvtColor(img, imgGray, CV_RGB2GRAY); faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0)); //检测人脸 //画框 if(faces.size()>0){ for(int i =0; i < faces.size(); i++ ) { rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),Scalar(0, 255, 0), 1, 8); //框出人脸位置 } } imshow("Camera", img); int k = waitKey(500); //按"q"退出 if(k == 113){ destroyAllWindows(); break; } } }
三:检测结果
四:稍微修改代码调通对视频文件中人脸的检测
/*************************************************************** 主要步骤: 1.将人脸检测分类器放在项目目录中去,加载Haart特征分类器(描述人体各个部位的Haar特征值,包括人脸、眼睛、嘴唇等) 2.调用detecMutiScale()函数检测,对函数中相关的参数进行修改调整 3.打开摄像头或者视频文件把检测到的人脸用矩形画出来 ****************************************************************/ #include "opencv2/objdetect.hpp" #include "opencv2/videoio.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; using namespace cv; String Path_faceCascade; //定义xml文件路径,训练模型以xml文件格式保存 CascadeClassifier faceCascade; //定义人脸分类器,opencv中的harr Cascades int main() { Path_faceCascade = "models/haarcascade_frontalface_default.xml"; //导入xml文件,给Path_faceCascade if( !faceCascade.load( Path_faceCascade ) ) { printf("--(!)Error loading face cascade\n"); return -1; } VideoCapture cap; std::vector<Rect> faces; //cap.open(0); //打开摄像头 cap.open("E://demo.avi"); //打开视频 if(!cap.isOpened()){ return 1; } Mat img, imgGray; while(1) { cap>>img; cvtColor(img, imgGray, CV_RGB2GRAY); faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0)); //检测人脸 //画框 if(faces.size()>0){ for(int i =0; i < faces.size(); i++ ) { rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),Scalar(0, 255, 0), 1, 8); //框出人脸位置 } } imshow("Camera", img); waitKey(30); } cap.release();//释放资源 }
检测结果
原文地址:https://www.cnblogs.com/fpzs/p/10526219.html
时间: 2024-11-02 16:18:52