c++ dlib 拿到 full_object_detection 后怎么做人脸矫正
时间: 2024-01-24 18:17:24 浏览: 165
拿到 `full_object_detection` 后,可以通过 `dlib::get_face_chips()` 函数将人脸图像切割出来,然后进行矫正处理。
具体操作步骤如下:
1. 从 `full_object_detection` 中获取人脸关键点坐标,通过 `dlib::image_window` 函数可以可视化显示人脸关键点。
```c++
dlib::image_window win;
win.set_image(img);
win.add_overlay(render_face_detections(shapes));
```
2. 利用 `dlib::get_face_chip_details()` 函数获取切割出的人脸图像的大小和位置信息,然后使用 `dlib::get_face_chips()` 函数将人脸图像切割出来。
```c++
std::vector<dlib::chip_details> dets;
const int size = 150;
dlib::get_face_chip_details(shapes, size, 0.25, dets);
std::vector<dlib::matrix<dlib::rgb_pixel>> faces;
dlib::get_face_chips(img, dets, faces);
```
3. 对切割出的人脸图像进行矫正处理,使其眼睛水平并且垂直方向对称。可以通过 `dlib::get_face_chip()` 函数获取人脸图像并进行矫正处理。
```c++
std::vector<dlib::matrix<dlib::rgb_pixel>> faces_aligned;
for (auto&& face : faces)
{
// 将人脸图像进行矫正
auto shape = sp(face, dlib::rectangle(0, 0, face.nc(), face.nr()));
auto face_chip = dlib::get_face_chip(face, shape);
faces_aligned.push_back(face_chip);
}
```
4. 处理完毕后,可以将切割并矫正后的人脸图像保存起来,或者进行人脸识别等其他操作。
阅读全文