dlib 19.24 中 get_affine_transform 为什么遗弃
时间: 2023-11-13 13:05:58 浏览: 182
在 dlib 19.24 版本中,`get_affine_transform` 函数被遗弃的原因是因为它的实现方式存在一些问题。该函数的主要功能是计算一个仿射变换矩阵,该矩阵可以将一个图像中的一组点映射到另一个图像中的一组点。然而,该函数的实现方式存在一些数值稳定性问题,导致在某些情况下计算结果不准确,甚至可能出现数值错误。
为了解决这个问题,dlib 团队在后续版本中引入了一个新的函数 `find_affine_transform`,该函数使用更加稳定和准确的算法来计算仿射变换矩阵。因此,如果你需要计算仿射变换矩阵,建议使用 `find_affine_transform` 函数而不是 `get_affine_transform` 函数。
相关问题
dlib 19.24 中 get_affine_transform遗弃了吗
在dlib 19.24版本中,确实已经将get_affine_transform函数遗弃。相应地,dlib团队提供了一个新的函数get_similarity_transform来代替它。这个新函数的作用与get_affine_transform类似,但是它只能生成相似变换矩阵,而不是一般的仿射变换矩阵。
如果你需要使用仿射变换矩阵,则可以考虑使用其他的库或者自己实现一个仿射变换函数。
dlib19.24 get_frontal_face_detector后怎么设置人脸检测大小
在dlib19.24版本中,`dlib::get_frontal_face_detector()`函数返回的是一个已经预训练好的人脸检测器,它是一个基于HOG特征的分类器。该分类器没有提供直接设置最小和最大人脸大小的方法,但可以通过调整输入图像的尺寸来实现相似的效果。
具体来说,你可以使用 `dlib::pyramid_down()` 函数将输入图像降采样一定比例,从而缩小图像中的所有物体,包括人脸。这样一来,人脸检测器就可以检测到更小的人脸。例如,以下代码将输入图像降采样一半后再进行人脸检测:
```cpp
dlib::frontal_face_detector detector = dlib::get_frontal_face_detector();
dlib::pyramid_downsampler downsampler;
dlib::array2d<dlib::rgb_pixel> img;
// 从文件或流中读取图像数据
dlib::deserialize(image_file_stream) >> img;
// 将图像降采样一半
downsampler(img);
// 在降采样后的图像上进行人脸检测
std::vector<dlib::rectangle> faces = detector(img);
// 将检测结果映射回原始图像上
for (auto& face : faces) {
face = upscaled(face, 2);
}
```
在上面的代码中,`dlib::pyramid_downsampler` 类被用于降采样输入图像。你可以根据需要调整降采样的比例,从而实现不同的人脸检测效果。注意,检测结果需要映射回原始图像上,这里的 `upscaled()` 函数可以用于将检测结果从降采样后的图像映射回原始图像上。
阅读全文