matplotlib 中的 ax.fill() 创建白边

ax.fill() in matplotlib creates white margins

我正在使用 caffe、sciki-image、opencv 和 matplotlib/pyplot 进行图像分割。这项工作涉及一些图像大小调整。本质上,在我加载并调整图像大小后:

put_image = caffe.io.load_image(os.path.join(source_dir, pix)
input_image = caffe.io.resize_image(input_image, (600,500), interp_order=3)

我做了很多处理。在我决定为图像添加一些轮廓之前,一切都很好:

fig, ax = plt.subplots(1, 1)
ax.imshow(image2)
...
ax.fill(vald[:, 0], vald[:, 1], fill=False, color='red', linewidth=1)

其中 vald 是一些数组,image2 是经过处理的 input_image

的一些输出

保存后

fig.savefig(save_dir + str(idx) + ".png", bbox_inches = 'tight')

我得到了这样的东西,它本质上是原始图像的裁剪版本

所以我的第一反应当然是裁剪图像然后调整大小,但结果却失去了很多质量(分辨率下降)。我尝试遵循 here and here 的建议,但也没有得到任何改进。

跟进我的评论: 轴限制已更改。图像位于 (0,0) 和 (500, 600) 之间的矩形中。然而 x- 和 y-lim 并不完全是这样;它们的范围从 (-100, -100) 到 (500, 600)。只需使用 ax.set_xlim([0, 500])ax.set_ylim([600, 0]) 更新限制以删除周围的白框。

注意:如果您还想隐藏刻度,可以使用 ax.set_xticks([])ax.set_yticks([]) 轻松实现,或者将刻度的可见性设置为 False.