用dlib 19.24 c++帮我写一段做人脸矫正的例子 返回矫正后的 cv::mat 列表
时间: 2024-01-24 16:16:50 浏览: 135
好的,以下是一个简单的使用dlib进行人脸矫正的例子,它可以接收一张图片,对其中的所有人脸进行矫正,并返回矫正后的cv::mat列表:
```c++
#include <dlib/opencv.h>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing.h>
using namespace dlib;
std::vector<cv::Mat> face_alignment(cv::Mat img)
{
// 初始化检测器
frontal_face_detector detector = get_frontal_face_detector();
shape_predictor sp;
deserialize("shape_predictor_68_face_landmarks.dat") >> sp;
// 将opencv的mat格式转换为dlib的image格式
cv_image<bgr_pixel> dlib_img(img);
// 检测人脸
std::vector<rectangle> dets = detector(dlib_img);
// 矫正每个人脸
std::vector<cv::Mat> faces;
for (auto&& det : dets)
{
full_object_detection shape = sp(dlib_img, det);
// 人脸矫正
auto aligned_face = get_face_chip(dlib_img, shape);
// 将dlib的image格式转换为opencv的mat格式
cv::Mat aligned_mat = dlib::toMat(aligned_face);
faces.push_back(aligned_mat);
}
return faces;
}
```
使用方法:
```c++
cv::Mat img = cv::imread("test.jpg");
std::vector<cv::Mat> faces = face_alignment(img);
```
其中,`shape_predictor_68_face_landmarks.dat`是dlib官方提供的人脸关键点检测模型,在运行前需要先下载并放置在代码文件夹中。
阅读全文