如何在dlib中保存得到的面部地标图像?

时间:2016-04-16 10:24:54

标签: c++ face-detection feature-extraction dlib

我正在使用dlib的face_landmark_detection_ex.cpp,它在原始图像上显示检测到的面部图像和所有面部标记。我想将原始图像与所有68个面部地标保存到我的计算机上。我知道它可以通过dlib的 save_png draw_rectangle 功能来完成,但是draw_rectangle只给出检测到的面部矩形位置,随之而来,我也想在上面绘制地标点原始图像并保存如下:

image show in window

1 个答案:

答案 0 :(得分:4)

参数rgb_pixel用于指定用于绘制矩形的像素种类。在函数的标头声明中,定义了默认情况下要使用的像素类型是rgb_pixel(0,0,0)template <typename pixel_type> void draw_rectangle ( const canvas& c, rectangle rect, const pixel_type& pixel = rgb_pixel(0,0,0), const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity) );

类型的黑色像素
draw_rectangle

因此,要保存图像,请先使用函数save_png在图像上绘制矩形,然后使用shape.part(i)保存此图像。

编辑新问题:

绘制它们的一种简单方法是使用函数sp(img, dets[j])绘制face_landmark_detection_ex.cpp上函数draw_pixel返回的每个地标(template <typename pixel_type> void draw_pixel ( const canvas& c, const point& p, const pixel_type& pixel ); /*! requires - pixel_traits<pixel_type> is defined ensures - if (c.contains(p)) then - sets the pixel in c that represents the point p to the given pixel color. !*/ )。

save_png

一旦绘制了所有地标,请使用template <typename image_type, typename pixel_type > void draw_line ( image_type& img, const point& p1, const point& p2, const pixel_type& val ); /*! requires - image_type == an image object that implements the interface defined in dlib/image_processing/generic_image.h ensures - #img.nr() == img.nr() && #img.nc() == img.nc() (i.e. the dimensions of the input image are not changed) - for all valid r and c that are on the line between point p1 and p2: - performs assign_pixel(img[r][c], val) (i.e. it draws the line from p1 to p2 onto the image) !*/ 保存图像。

但是我建议画那样的线而不仅仅是地标 enter image description here

为此,请使用以下功能:

std::shared_ptr