簡體   English   中英

如何使用 matplotlib 繪圖:在沒有 imshow 的情況下刪除軸、圖例和空白?

[英]How to use matplotlib plots: removing axis, legends and white spaces without imshow?

我一直在嘗試在不使用軸、空格、圖例等的情況下保存我的圖像...而不使用 imshow ,這是因為我不希望圖像出現/嘗試出現在另一個 window 中。 相反,我希望它只保存為 image.png。

這是我迄今為止嘗試過的,但兩者都試圖在另一個我不想要的 window 中顯示圖像。 但它確實成功地保存了沒有軸等的圖像......

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))

總結評論:假設它不一定必須是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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM