2017-02-21 68 views
-1

enter image description herePIL,Image.fromarray使噪聲

我做圖像(字母I)和ARR(np.array)
模式是 'L',灰度IMG之間的轉換。
有像np.array噪音沒有像素,但是當我做了轉換。 img = Image.fromarray(arr) img.save(path)

再就是在保存IMG噪音。
EX> ARR [0]成分都是255,但有在保存的圖像的第一行的一些噪音。

我不知道爲什麼噪聲的圖像會發生。

+0

也許通過有損壓縮引起的。你保存什麼格式?爲了幫助我們幫助您,請編寫符合[MCV](http://stackoverflow.com/help/mcve)的示例代碼。 – kazemakase

回答

0

問題是由於圖像的格式。

解決方案是使用圖像的非壓縮格式(例如.png或.gif)

下面是示例來複制此問題:


這個例子示例文件是:「演示.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) 

這裏是可變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) 

讓我們試着爲他們節省到文件:

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([[ 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) 

你可以觀察到,.jpg文件了損壞,而.png文件的原始內容不變。

親切的問候。

+0

哇。完美的答案給我。非常感謝!! – yunsoo