【问题标题】:save image with face landmarks using dlib in python?在python中使用dlib保存带有面部标志的图像?
【发布时间】:2019-06-28 11:35:02
【问题描述】:

有没有办法使用 python 使用 dlib 覆盖面部地标来保存图像?因为我只找到了适用于 c++ 的 draw_rectangle 函数!

【问题讨论】:

    标签: python opencv3.0 dlib


    【解决方案1】:

    得到人脸点后,可以在原图上绘制,如下:

    def annotate_landmarks(im, landmarks):
        CIRCLE_SIZE = 1
        FONT_SCALE = 1
        THICKNESS_S = 1
        im = im.copy()
            #0-16: head
        for idx, point in enumerate(landmarks[0:17]):
            pos = (point[0, 0], point[0, 1])
            #cv2.putText(im, str(idx), pos, fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, fontScale=FONT_SCALE, color=(0, 0, 255))
            cv2.circle(im, pos, CIRCLE_SIZE, color=(255, 0, 0), thickness=THICKNESS_S)
    
        #17-21: left eye brow
        #22-26: right eye brow
        for idx, point in enumerate(landmarks[17:27]):
            pos = (point[0, 0], point[0, 1])
            #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
            cv2.circle(im, pos, CIRCLE_SIZE, color=(0, 255, 0), thickness=THICKNESS_S)
    
        #27-35: nose
        for idx, point in enumerate(landmarks[27:36]):
            pos = (point[0, 0], point[0, 1])
            #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
            cv2.circle(im, pos, CIRCLE_SIZE, color=(0, 0, 255), thickness=THICKNESS_S)
    
        #36-41: left eye
        #42-47: right eye
        for idx, point in enumerate(landmarks[36:48]):
            pos = (point[0, 0], point[0, 1])
            #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
            cv2.circle(im, pos, CIRCLE_SIZE, color=(0, 255, 255), thickness=THICKNESS_S)
    
        #48-68: lips
        for idx, point in enumerate(landmarks[48:68]):
            pos = (point[0, 0], point[0, 1])
            #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
            cv2.circle(im, pos, CIRCLE_SIZE, color=(255, 0, 255), thickness=THICKNESS_S)
        return im
    

    【讨论】:

    • 这也是我会使用的方法,但你应该指出你正在使用 opencv-python 库以及 dlib。我不确定提出问题的人是否都安装了。
    • 其实我有.. :) 我也同时使用它们!
    • 酷,很高兴它有帮助:D
    【解决方案2】:

    这对我来说是这样的。

    .....................
    shape = predictor(img, d)
    vec= np.empty([68,2], dtype=int)
    for b in range(68):
        vec[b][0] = shape.part(b).x
        vec[b][1] = shape.part(b).y
    
     landmarks_img=annotate_landmarks(img,vec)
     cv2.imwrite("landmarked-"+os.path.basename(f),landmarks_img) #save image
    

    我在哪里对 annotate_landmarks()

    进行了更改
    pos = (point[0], point[1])
    

    而不是:

    pos = (point[0, 0], point[0, 1])
    

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2018-08-16
      • 2015-12-19
      • 2016-10-27
      • 2017-06-07
      • 2021-07-25
      • 2015-06-28
      • 2019-06-10
      • 2016-08-08
      相关资源
      最近更新 更多