【问题标题】:Applying Affine transform on an image using dlib使用 dlib 对图像应用仿射变换
【发布时间】:2016-11-26 15:46:56
【问题描述】:

我希望使用 dlib 检测器学习到的 68 个地标来对齐两张人脸图像。我知道我可以将图像转换为 OpenCV Mat,然后使用 warpAffine 方法。我有一定的内存泄漏,并决定看看是否可以只使用 dlib。我注意到 dlib 库在 geometry.h 中有一些用于此目的的方法。

为此,我使用find_affine_transform 方法获取point_transform_affine 对象,在该对象中我找到了使用形状和模板获得的3 个点之间的仿射变换。在文档中,我们可以使用此对象对点向量应用变换。但是,我一直无法找到一些例子。

  1. 您能告诉我如何应用所学的转换吗?
  2. 其次,我在 array2d 对象中加载了一个图像。有没有办法从 array2d 到点向量?

下面列出了 find_affine_transform 的一些初始代码。

std::vector<dlib::vector<double,2>> TemplateLandmarks;
std::vector<dlib::vector<double,2>> ObtainedLandmarks;
// push_back the specific coordinates in the above vectors

array2d<bgr_pixel> img; 
// read the image from a file path using load_image

//  learning the best transformation map
point_transform_affine H = find_affine_transform ( ObtainedLandmarks , TemplateLandmarks );

【问题讨论】:

  • 您找到解决方案了吗?关于将转换矩阵应用于 dlib::array2d 的函数,我也有同样的问题

标签: c++ opencv dlib


【解决方案1】:

这可以使用 dlib 中的 extract_image_chips 函数来完成。甚至还有一个在face landmarking example program 中使用它来对齐面的示例。

【讨论】:

  • 经过一番“谷歌搜索”后,我在你的库中找到了 dlib::transform_image 函数,这似乎是 @NK18 和我正在寻找的 :-)
猜你喜欢
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
相关资源
最近更新 更多