使用c++版dlib做人脸对齐
dlib提供好了一个做人脸对齐的方法get_face_chip_details
人脸对齐的原理也很简单,主要是先通过人脸关键点检测,然后对其进行仿射变换,得到标准人脸。
使用例子如下:
#include"dlib/image_processing/frontal_face_detector.h"
#include"dlib/image_processing/render_face_detections.h"
#include "dlib/image_processing.h"
#include"dlib/image_io.h"
#include"dlib/gui_widgets.h"
#include"dlib/opencv/cv_image.h"
#include"dlib/opencv.h"
#include<opencv2/imgproc.hpp>
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace dlib;
using namespace cv;
int main() {
frontal_face_detector detector = get_frontal_face_detector();
array2d<rgb_pixel> cimg;
load_image(cimg,"1.jpg");
Mat image = imread("1.jpg");
shape_predictor sp;
deserialize("shape_predictor_68_face_landmarks.dat") >> sp;
std::vector<dlib::rectangle> face_DLib = detector(cimg);
if (face_DLib.empty()) {
cout << "No face is deteced by DLib" << endl;
}
full_object_detection shape = sp(dlib::cv_image<unsigned char>(image), face_DLib[0]);
matrix<rgb_pixel> face_chip;
extract_image_chip(cimg, dlib::get_face_chip_details(shape, 256, 0.25), face_chip);
return 0;
}
最终得到的face_chip就是我们需要的对齐后的结果。
还没有评论,来说两句吧...