首页 > 解决方案 > python - matplotlib.pyplot 用 4 个通道保存二进制掩码(?)

问题描述

我正在尝试将二进制掩码(即具有 False 和 True 值的数组)保存为 .png 文件。

但是,当使用 matplotlib.pyplot 这样做时,它会使用 4 个通道保存图像,我不知道为什么。

例如保存图像:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

m = np.array([[False, True],
             [False, True]])

plt.imsave("mask.png", m, cmap=cm.gray)

然后再次阅读并打印形状:

plt.imread("mask.png").shape

给我:

(2, 2, 4)

任何原因以及如何将其保存为具有 0/1 值的纯灰度,以便形状基本上只是(2,2)?

标签: pythonmatplotlib

解决方案


我遇到过同样的问题。它与matplotlib.pyplot. 使用库PIL和 png 文件只有 1 个通道。

from PIL import Image
Image.fromarray(img).save('img.png')

如果您正在处理浮动图像,则还必须先将其转换为 uint8。例如像这样:

img = 255 * img
img = img.astype(np.uint8)

推荐阅读