Comment enregistrer l’image de la marque de visage obtenue dans dlib?

J’utilise le fichier face_landmark_detection_ex.cpp de dlib qui affiche l’image de visage détectée et tous les points de repère de visage sur l’image d’origine. Je souhaite enregistrer l’image d’origine avec les 68 points de repère de visage sur mon ordinateur. Je sais que cela peut être fait par les fonctions save_png et draw_rectangle de dlib mais draw_rectangle ne donne que la position du rectangle de visage détecté. Parallèlement, je souhaite également dessiner les points de repère sur l’image d’origine et les enregistrer comme suit:

image montrer dans la fenêtre

Le paramètre pixel_type est utilisé pour spécifier le type de pixels à utiliser pour dessiner le rectangle. Dans la déclaration d’en-tête de la fonction, il est défini que par défaut, les types de pixels à utiliser sont des pixels noirs de type rgb_pixel ( rgb_pixel(0,0,0) ).

 template  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) ); 

Par conséquent, pour enregistrer l’image, utilisez d’abord la fonction draw_rectangle pour dessiner le rectangle sur l’image, puis enregistrez cette image avec save_png .


Modifier pour une nouvelle question:

Un moyen simple de les représenter consiste à dessiner chaque repère ( shape.part(i) ) renvoyé par la fonction sp(img, dets[j]) sur le face_landmark_detection_ex.cpp avec la fonction draw_pixel .

 template  void draw_pixel ( const canvas& c, const point& p, const pixel_type& pixel ); /*! requires - pixel_traits is defined ensures - if (c.contains(p)) then - sets the pixel in c that represents the point p to the given pixel color. !*/ 

Et une fois que tous les points de repère ont été dessinés, enregistrez l’image avec save_png .

Cependant, je recommanderais de tracer des lignes comme celle-là au lieu des points de repère entrez la description de l'image ici

Pour ce faire, utilisez la fonction:

 template  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() (ie 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) (ie it draws the line from p1 to p2 onto the image) !*/