opencv 人脸识别

来源:互联网 发布:js做表格 编辑:程序博客网 时间:2024/06/09 22:42

话不多说,直接推荐干货  Robust Real-time Object Detection. Paul Viola, Michael Jones. IJCV 2004.

人脸识别必读N篇文章有时间可以多读读论文。

opencv里面有直接训练好的分类器,直接调用接口很容易实现人脸识别。opencv官方人脸识别范例

我对此代码简单修改了一下,如下:

#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;/** Function Headers */void detectAndDisplay(Mat frame);/** Global variables */string pic_name = "test1.jpg";String face_cascade_name = "haarcascade_frontalface_alt.xml";String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";CascadeClassifier face_cascade;CascadeClassifier eyes_cascade;string window_name = "Capture - Face detection";RNG rng(12345);/** @function main */int main(int argc, const char** argv){Mat frame;//-- 1. Load the cascadesif (!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading\n"); return -1; };if (!eyes_cascade.load(eyes_cascade_name)){ printf("--(!)Error loading\n"); return -1; };frame = imread(pic_name);if (!frame.empty())detectAndDisplay(frame);elsecout << "frame is empty" << endl;waitKey(0);return 0;}/** @function detectAndDisplay */void detectAndDisplay(Mat frame){std::vector<Rect> faces;Mat frame_gray;cvtColor(frame, frame_gray, CV_RGB2GRAY);equalizeHist(frame_gray, frame_gray);//-- Detect facesface_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(25, 25));for (size_t 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(frame, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);Mat faceROI = frame_gray(faces[i]);std::vector<Rect> eyes;//-- In each face, detect eyeseyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(25, 25));for (size_t j = 0; j < eyes.size(); j++){Point center(faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5);int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);circle(frame, center, radius, Scalar(255, 0, 0), 4, 8, 0);}}imwrite("output.jpeg", frame);imshow(window_name, frame);}

结果如下:



0 0
原创粉丝点击