使用dlib在图像上应用仿射变换

时间:2016-07-22 16:40:52

标签: c++ opencv dlib

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

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

  1. 你能告诉我如何应用所学的转变吗?
  2. 其次,我在array2d对象中加载了一个图像。有没有办法从array2d转到积分矢量?
  3. 下面列出了一些初始代码,用于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 );
    

1 个答案:

答案 0 :(得分:3)

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