【问题标题】:Image distortion after converting Numpy to PIL image将 Numpy 转换为 PIL 图像后的图像失真
【发布时间】:2018-12-04 02:40:09
【问题描述】:

我想将一些 Numpy 转换为 Image,所以我在 PIL 中使用了 Image

from PIL import Image
im1 = Image.fromarray(np.uint8(X1)) # X1 dtype uint8, scale 0~255 image
im1.save("img.png")

im2= Image.fromarray(np.uint8(X2*255))   #X2 dtype uint16, sacke 0~1 mask ,so  X2*255
im2.save("mask.png")

X1, X2 是 numpy 数组。 然后发生了一些令人困惑的事情。有些图像看起来不错,但有些图像失真。

第一个是失真,第二个是正常。

【问题讨论】:

  • 这两个都是图片,而且蒙版很好看,所以我就不显示了。
  • im1出现失真,二值掩码的im2看起来正常。
  • 如果您提供minimal, complete and verifiable example 来重现问题,那么有人会更容易帮助您。例如,我们没有X1。如果X1np.arange(256).reshape(16, 16).astype(np.uint8),你看到问题了吗?
  • 您可以尝试numpngw,这是我为将 numpy 数组写入 PNG 文件而编写的一个包。它没有其他依赖项。
  • 尝试打印np.amax(X1)np.amin(X1)X2

标签: python numpy matplotlib python-imaging-library


【解决方案1】:

在阅读 @Mark Setchell 评论后编辑:由于 PNG 不会扭曲值,我猜他们使用 JPG 压缩。如果您希望图像保持原样,请尝试以下操作:

import cv2 

cv2.imwrite("img.png", img)

Here 是文档。

【讨论】:

  • PNG 压缩是无损的,因此打开或关闭它,或者改变它的 quality 值永远不会扭曲图像值 - 它只会影响文件大小和压缩时间。跨度>
猜你喜欢
  • 2017-06-25
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2016-05-29
  • 1970-01-01
  • 2019-11-29
  • 2021-12-09
相关资源
最近更新 更多