Matplotlib меняет каналы изображения при сохранении - PullRequest
0 голосов
/ 14 октября 2018

Я использую matplotlib для чтения изображения, но количество каналов меняется после сохранения исходного изображения с помощью imsave.Вот код:

import matplotlib.image as mpimg

img = mpimg.imread('sample.tiff')

print(img.shape)

mpimg.imsave('sample2.tiff', img)


img2 = mpimg.imread('sample2.tiff')

print(img2.shape)

А вот и вывод:

(2160, 2160)
(2160, 2160, 4)

Изображение становится 4-канальным, хотя изначально оно было 1-канальным.И кажется, что последний канал всегда 255. Что здесь происходит?И оригинальное изображение выглядит менее значимым, поскольку оно все черное.Но когда я читаю и сохраняю его с помощью imread и imsave, я наконец вижу некоторые значимые цифры.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Похоже, вы не первый, у кого возникла эта проблема - см. Здесь .

Я бы предложил использовать imageio (или PIL) для сохранения изображения (на самом деле, читать тоже) и работает нормально:

import imageio
import matplotlib.image as mpimg

img = mpimg.imread('a.tif')

imageio.imwrite('result.tif',img)
0 голосов
/ 14 октября 2018

Входное изображение sample.tiff - одноканальное изображение в оттенках серого.Никто не может знать, почему это так, это просто зависит от того, откуда вы взяли это изображение.

imread преобразует это изображение в двумерный массив.

Когда в качестве входных данных задан двумерный массив numy, imsave будет применять цветовую карту к массиву и без дополнительных аргументов применять нормализацию между минимальным и максимальным значением данных.Таким образом, полученное изображение является цветным изображением с 4 каналами.

imread затем преобразует это изображение в трехмерный массив NumPy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...