我的脸部有大约200个地标,并且绘制了一个具有fill_color的图像,并带有眉毛,嘴唇等语义区域。
然后,我将图形保存为256x256大小,但结果是353x329,带有空白和我绘制的图像的256x256大小。
我对绘制的结果还可以,但是我不想发布使用cv2之类的lib来切断空白的过程。
我如何仅使用matplotlib就能做到这一点?
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()