gpt4 book ai didi

python - 使用 matplotlib 保存灰度图像,加载时有多个 channel

转载 作者:行者123 更新时间:2023-12-03 14:49:32 29 4
gpt4 key购买 nike

我正在使用

import matplotlib.pyplot as plt
plt.imsave(img_path,img_arr,cmap = 'gray') #shape (512,512)
...
img = plt.imread(img_path)

并且 img.shape 返回一个 (512,512,4) 而我预计它只会是 (512,512)。
我想也许所有的 channel 都是一样的,所以我只能选择一个,但 np.allclose(img[:,:,0],img_arr)无论我选择哪个索引,都返回 false。打印图像,它们确实是我比较的正确图像,因为它们看起来几乎相同(肉眼),但显然不完全相同。

我也尝试用 cv2 保存图像,但由于某种原因,这似乎保存了一个黑匣子。用 cv2.imread(img_path,0) 加载它们确实返回了一个 (512,512) 数组,但似乎丢失了一些东西,因为再次, np.allclose()告诉我他们是不同的。

我想知道是否有保存灰度图像的好方法?我尝试的每种方法似乎都将其转换为 RBG 或 RGBA,这真的很烦人。另外,我想保留图像的 dtype (int16),因为下采样会丢失重要信息。

提前致谢。

最佳答案

使用 matplotlib 保存图像时,您无法保留 16 位的位深度,其中任何默认颜色图只有 256 种颜色(= 8 位)。

此外,matplotlib 将像素值转换为浮点数,这可能是舍入误差的来源。

总的来说,如果您需要获得完美的准确性,matplotlib 似乎不是最佳工具。

话虽如此,甚至 PIL似乎不允许 16 位单 channel png。在 this question 中有一个可能的解决方案,但我还没有测试过。

在任何情况下,在不损失精度的情况下保存数组的防弹方法是使用 numpy 保存它,np.save("arr.npy", im_arr) .

关于python - 使用 matplotlib 保存灰度图像,加载时有多个 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51293585/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com