python - 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)?
解决方案
我遇到过同样的问题。它与matplotlib.pyplot
. 使用库PIL
和 png 文件只有 1 个通道。
from PIL import Image
Image.fromarray(img).save('img.png')
如果您正在处理浮动图像,则还必须先将其转换为 uint8。例如像这样:
img = 255 * img
img = img.astype(np.uint8)
推荐阅读
- python - 为什么这个 Python dict 理解需要永远运行?
- c++ - SSBO 绑定点索引可以是任何值吗?
- windows-services - 重新启动计算机后,Windows 服务不接受凭据
- javascript - 展平 JavaScript 嵌套对象
- tensorflow - 我的自定义模型的损失收敛到一个高值(Tensorflow)
- r - 如何获得模型预测的偏差校正引导置信区间
- optimization - 与 Julia 一起解决 15 个谜题
- sql - BigQuery Union Distinct Where Value not in Preceding DataSet
- python - 使用 Python 从分类列中提取特定值
- c# - 如何在 EF Core 3.1 中重命名 PrimaryKey 和 ForeignKey?