Matplotlib Savefig左侧和底部无空白,图像尺寸为256x256

时间:2018-08-09 01:36:54

标签: matplotlib

我的脸部有大约200个地标,并且绘制了一个具有fill_color的图像,并带有眉毛,嘴唇等语义区域。

然后,我将图形保存为256x256大小,但结果是353x329,带有空白和我绘制的图像的256x256大小。

我对绘制的结果还可以,但是我不想发布使用cv2之类的lib来切断空白的过程。

我如何仅使用matplotlib就能做到这一点?

256x256 result353x329 saved

def save_landmark_img(black, landmark_list, n) :

    my_dpi = 192.0
    fig = plt.figure(frameon=False)
    plt.figure(figsize=(256/my_dpi, 256/my_dpi), dpi=my_dpi)
    plt.axis('off')
    plt.imshow(black)
    fig.tight_layout()

# ``'b'``          blue
# ``'g'``          green
# ``'r'``          red
# ``'c'``          cyan
# ``'m'``          magenta
# ``'y'``          yellow
# ``'k'``          black
# ``'w'``          white


    plt.fill(landmark_list[n][:70:2], landmark_list[n][1:70:2], 'y') #jaw_un

    #jaw_up
    refpoints_x = [2,66,68,70,72,106,104,102,100,64] 
    refpoints_y = [i+1 for i in refpoints_x]  
    plt.fill(landmark_list[n][refpoints_x], landmark_list[n][refpoints_y],'y')

    #forehead
    #plt.fill(landmark_list[n][refpoints_x], p_j(x)-129 + p(x),'y')

    plt.fill(landmark_list[n][66:100:2], landmark_list[n][67:100:2], 'b') #eyebrow_l
    plt.fill(landmark_list[n][102:134:2], landmark_list[n][103:134:2], 'b')#eyebrow_r

    plt.fill(landmark_list[n][148:184:2], landmark_list[n][149:184:2], 'g')#nose

    plt.fill(landmark_list[n][186:198:2], landmark_list[n][187:198:2], 'w')#eye_l
    plt.fill(landmark_list[n][210:222:2], landmark_list[n][211:222:2], 'w')#eye_r

    plt.fill(np.concatenate((landmark_list[n][234:258:2],landmark_list[n][282:294:2])), 
             np.concatenate((landmark_list[n][235:258:2],landmark_list[n][283:294:2])), 
             'm')#mouth_u

    plt.fill(np.concatenate((landmark_list[n][260:280:2],landmark_list[n][298:308:2])), 
             np.concatenate((landmark_list[n][261:280:2],landmark_list[n][299:308:2])),
             'm')#mouth_l

    plt.fill(landmark_list[n][282:308:2], landmark_list[n][283:308:2], 'w')#eye_l


    #pupils are deprecated since it's color-fill is too unnatural 
    #plt.fill(landmark_list[n][310:330:2], landmark_list[n][311:330:2], 'k')#pupil_l
    #plt.fill(landmark_list[n][344:360:2], landmark_list[n][345:360:2], 'k')#pupil_r


    plt.savefig("/home/ubuntu/face_reenactment/data/test/%06d" %n, bbox_inches = 'tight', frameon = False, transparent = True, pad_inches = 0, dpi = 256)
    fig.show()
    #plt.clf()

0 个答案:

没有答案