PIL, Image.fromarray шуметь

введите описание изображения здесь

я делаю преобразование между изображениями (алфавит I) и arr(np.array)
режим 'L', оттенки серого img.
нет пикселей как шум в np.array, но когда я сделал преобразование. img = Image.fromarray(arr) img.save(path)

тогда есть шумы в сохраненном img.
Все компоненты ex> arr[0] равны 255, но в первой строке сохраненного изображения есть некоторый шум.

я не знаю, почему шум появляется на изображениях.

1 ответ

Проблема связана с форматом изображения.

Решение состоит в том, чтобы использовать не сжимающий формат изображения (такой как.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)

Вот вывод для переменной 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 не изменилось.

С уважением.

Другие вопросы по тегам