将图像保存为uint8时丢失信息



我有一张图片,我只是用任意一张谷歌图片来测试它,我把它保存为"Picture.png"现在我想规范化该图像并将其保存为.npy文件,因此我使用以下代码:

from PIL import Image
import numpy as np
temp = Image.open("Picture.png")
image = np.asarray(temp)
def NormalizeData(data):
return ((data - np.min(data)) / (np.max(data) - np.min(data)))
image = NormalizeData(image)
np.save("Picture.npy", image)
然后,我可以用代码检索图像:
import matplotlib.pyplot as plt
image = np.load("Picture.npy")
plt.imshow(image)
plt.show()

问题是。npy文件太大了,所以我在NormalizeData函数中添加了。astype('uint8'),这节省了大量的空间。但是现在,当我尝试在新的uint8 .npy文件上运行plt.show()时,我得到了一个白色的画布。

我做错了什么?

您正在将数据规范化为0到1之间,然后将其转换为整数。将所有数字四舍五入为0。

你应该在使用astype(np.uint8)之前将数字乘以255,这样数字将在0到255之间,这是无符号8位整数的正确范围。

最新更新