请让我知道为什么PIL中的image.fromarray无法在matplotlib中作为plt.imshow运行

时间:2019-02-21 14:05:00

标签: image matplotlib python-imaging-library

我试图通过使用image.fromarray从数组中显示图片,但无法像从plt.imshow中那样获得正确的图片。你有什么想法吗?

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

row,col,ch=img_array.shape
mean=0.0
sigma=20
gauss = np.array(np.random.normal(mean,sigma,(row,col,ch)),dtype=np.int64)
noisy = img_array + gauss
new_image = Image.fromarray(noisy,'RGB')
new_image

not requested image

如果我通过plt.imshow运行它,则请求的图片在下面

 plt.imshow(noisy, interpolation='nearest')
 plt.show()

requested image

1 个答案:

答案 0 :(得分:1)

您的类型太大-int64

更改以下行:

gauss = ...

收件人:

gauss = np.array(np.random.normal(mean,sigma,(row,col,ch)),dtype=np.int8)                  
noisy = (img_array + gauss).astype(np.uint8)                                               
Image.fromarray(noisy,'RGB').save('result.png') 

enter image description here

理想情况下,您也将归一化,因为您要在0..255范围内添加一个像素到-20 .. + 20范围内的一些噪声,这意味着您将在某些点上溢出255。