如何使用matplotlib绘图:在没有imshow的情况下删除轴、图例和空白?

2024-09-27 09:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在试图保存我的图像没有轴,空白,图例等不使用imshow,这是因为我不希望图像/尝试显示在另一个窗口中。相反,我希望它只保存为image.png

这是我到目前为止尝试过的,但两者都试图在另一个窗口中显示我不想要的图像。但它确实成功地保存了无轴图像等

viz这是我的数据

viz = display_images(outputs.copy()) #(outputs.copy(), inputs.copy())

我试过:

fig = plt.figure(frameon=False)
fig.set_size_inches(6.4,4.8)

ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
fig.add_axes(ax)

ax.imshow(viz, aspect='auto')
fig.savefig('image.png')

为了更清楚地说明这一点,我加入了display_images的代码 虽然可能不需要帮助解决初始问题

def display_images(outputs, inputs=None, gt=None, is_colormap=True, is_rescale=True):
    import matplotlib.pyplot as plt
    import skimage
    from skimage.transform import resize

    plasma = plt.get_cmap('plasma')

    shape = (outputs[0].shape[0], outputs[0].shape[1], 3)
    
    all_images = []

    for i in range(outputs.shape[0]):
        imgs = []
        
        if isinstance(inputs, (list, tuple, np.ndarray)):
            x = to_multichannel(inputs[i])
            x = resize(x, shape, preserve_range=True, mode='reflect', anti_aliasing=True )
            imgs.append(x)

        if isinstance(gt, (list, tuple, np.ndarray)):
            x = to_multichannel(gt[i])
            x = resize(x, shape, preserve_range=True, mode='reflect', anti_aliasing=True )
            imgs.append(x)

        if is_colormap:
            rescaled = outputs[i][:,:,0]
            if is_rescale:
                rescaled = rescaled - np.min(rescaled)
                rescaled = rescaled / np.max(rescaled)
            imgs.append(plasma(rescaled)[:,:,:3])
        else:
            imgs.append(to_multichannel(outputs[i]))

        img_set = np.hstack(imgs)
        all_images.append(img_set)

    all_images = np.stack(all_images)
    
    return skimage.util.montage(all_images, multichannel=True, fill=(0,0,0))
    
    return skimage.util.montage(all_images, multichannel=True, fill=(0,0,0))

Tags: 图像truenpfigpltalloutputsinputs
1条回答
网友
1楼 · 发布于 2024-09-27 09:34:19

总结一下注释:假设它不一定必须是matplotlib,并且您正在保存范围为0到1的数组,则可以执行以下操作:

from PIL import Image
im = Image.fromarray((viz * 255).astype(np.uint8))
im.save('image.png')

在您添加问题中的最后一段代码后,我可以看到您正在使用scikit-image,因此您也可以使用它保存数组:

skimage.io.imsave('image.png', (viz * 255).astype(np.uint8))

相关问题 更多 >

    热门问题