OpenCV人脸检測
对人脸进行检測
#include "opencv2/core/core.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> using namespace std; using namespace cv; string face_cascade_name = "haarcascade_frontalface_alt.xml"; //该文件存在于OpenCV安装文件夹下的\sources\data\haarcascades内,须要将该xml文件拷贝到当前project文件夹下 CascadeClassifier face_cascade; void detectAndDisplay( Mat frame ); int main( int argc, char** argv ){ Mat image; image =imread("image/mm.jpg",1); //当前project的image文件夹下的mm.jpg文件,注意文件夹符号 if( !face_cascade.load( face_cascade_name ) ){ printf("级联分类器错误,可能未找到文件,拷贝该文件到project文件夹下!\n"); return -1; } detectAndDisplay(image); //调用人脸检測函数 waitKey(0); //暂停显示一下。 } void detectAndDisplay( Mat face ){ std::vector<Rect> faces; Mat face_gray; cvtColor( face, face_gray, CV_BGR2GRAY ); //rgb类型转换为灰度类型 equalizeHist( face_gray, face_gray ); //直方图均衡化 face_cascade.detectMultiScale( face_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(1, 1) ); for( int i = 0; i < faces.size(); i++ ){ Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 ); ellipse( face, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 0), 2,7, 0 ); } imshow("人脸识别", face ); }