Python PIL,Image.from阵列发出噪音

Python PIL,Image.from阵列发出噪音,python,numpy,python-imaging-library,Python,Numpy,Python Imaging Library,我正在进行图像(字母表i)和arr(np.数组)之间的转换 模式为“L”,灰度图像。 在np.array中并没有类似于噪声的像素,但当我进行转换时。 img=Image.fromarray(arr) img.save(路径) 然后,保存的img中会出现噪音。 ex>arr[0]组件全部为255,但在保存的图像的第一行中有一些噪声 我不知道为什么图像中会出现噪音。问题是由于图像的格式 解决方案是使用非压缩格式的图像(如.png或.gif) 下面是复制此问题的示例: 此示例的示例文件是:“de

我正在进行图像(字母表i)和arr(np.数组)之间的转换
模式为“L”,灰度图像。
在np.array中并没有类似于噪声的像素,但当我进行转换时。

img=Image.fromarray(arr)
img.save(路径)

然后,保存的img中会出现噪音。
ex>arr[0]组件全部为255,但在保存的图像的第一行中有一些噪声


我不知道为什么图像中会出现噪音。

问题是由于图像的格式

解决方案是使用非压缩格式的图像(如.png或.gif)

下面是复制此问题的示例:


此示例的示例文件是:“demo.png”和“demo.jpg”文件,它们在内容上是等效的

import numpy as np
from scipy import misc
img_jpg = misc.imread('demo.jpg', mode='L')
img_png = misc.imread('demo.png', mode='L')
以下是变量img_jpg的输出:

array([[ 17, 255,  82,   0,  74,  78,   0,  73],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [134, 147, 146, 135, 131, 129, 131, 142],
   [255, 255,   0, 255, 255, 255, 255, 255],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [  3,  25, 255, 255, 129, 163,   0, 225],
   [  0, 255,   0,   0,   0,   0,   0,   0],
   [  0,  32,  64,  92, 130, 167, 196, 219],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)
array([[ 26, 251,  84,   0,  75,  88,   0,  67],
   [247, 253, 255, 250, 255, 235, 255, 255],
   [133, 166, 124, 132, 141, 121, 135, 143],
   [255, 235,  12, 255, 248, 255, 255, 250],
   [251, 255, 255, 252, 255, 240, 251, 243],
   [  4,  36, 222, 255, 137, 163,   0, 247],
   [  0, 251,  14,   5,   0,   6,   0,   0],
   [  3,  27,  65,  89, 122, 170, 204, 222],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)
以下是变量img_png的输出:

array([[ 17, 255,  82,   0,  74,  78,   0,  73],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [134, 147, 146, 135, 131, 129, 131, 142],
   [255, 255,   0, 255, 255, 255, 255, 255],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [  3,  25, 255, 255, 129, 163,   0, 225],
   [  0, 255,   0,   0,   0,   0,   0,   0],
   [  0,  32,  64,  92, 130, 167, 196, 219],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)
array([[ 17, 255,  82,   0,  74,  78,   0,  73],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [134, 147, 146, 135, 131, 129, 131, 142],
   [255, 255,   0, 255, 255, 255, 255, 255],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [  3,  25, 255, 255, 129, 163,   0, 225],
   [  0, 255,   0,   0,   0,   0,   0,   0],
   [  0,  32,  64,  92, 130, 167, 196, 219],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)

让我们尝试将它们保存到文件:

misc.imsave('img_jpg.jpg', img_jpg)
misc.imsave('img_png.png', img_png)
现在让我们恢复它们:

img_jpg = misc.imread('img_jpg.jpg', mode='L')
img_png = misc.imread('img_png.png', mode='L')
以下是变量img_jpg的输出:

array([[ 17, 255,  82,   0,  74,  78,   0,  73],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [134, 147, 146, 135, 131, 129, 131, 142],
   [255, 255,   0, 255, 255, 255, 255, 255],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [  3,  25, 255, 255, 129, 163,   0, 225],
   [  0, 255,   0,   0,   0,   0,   0,   0],
   [  0,  32,  64,  92, 130, 167, 196, 219],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)
array([[ 26, 251,  84,   0,  75,  88,   0,  67],
   [247, 253, 255, 250, 255, 235, 255, 255],
   [133, 166, 124, 132, 141, 121, 135, 143],
   [255, 235,  12, 255, 248, 255, 255, 250],
   [251, 255, 255, 252, 255, 240, 251, 243],
   [  4,  36, 222, 255, 137, 163,   0, 247],
   [  0, 251,  14,   5,   0,   6,   0,   0],
   [  3,  27,  65,  89, 122, 170, 204, 222],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)
以下是变量img_png的输出:

array([[ 17, 255,  82,   0,  74,  78,   0,  73],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [134, 147, 146, 135, 131, 129, 131, 142],
   [255, 255,   0, 255, 255, 255, 255, 255],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [  3,  25, 255, 255, 129, 163,   0, 225],
   [  0, 255,   0,   0,   0,   0,   0,   0],
   [  0,  32,  64,  92, 130, 167, 196, 219],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)
array([[ 17, 255,  82,   0,  74,  78,   0,  73],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [134, 147, 146, 135, 131, 129, 131, 142],
   [255, 255,   0, 255, 255, 255, 255, 255],
   [255, 255, 255, 255, 255, 255, 255, 255],
   [  3,  25, 255, 255, 129, 163,   0, 225],
   [  0, 255,   0,   0,   0,   0,   0,   0],
   [  0,  32,  64,  92, 130, 167, 196, 219],
   [  0,   0,   0,   0,   0,   0,   0,   0],
   [  0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)
您可以观察到.jpg文件已损坏,而.png文件的原始内容未更改


亲切问候。

可能是有损压缩造成的。你用什么格式保存?为了帮助我们帮助您,请编写符合的示例代码。