Leitura e display de imagens com matplotlib

importando


In [1]:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

Leitura usando matplotlib native e com PIL

O matplotlib possui a leitura nativa de imagens no formato png. Quando este formato é lido, a imagem é automaticamente mapeada da faixa 0 a 255 contido no pixel uint8 da imagem para float 0 a 1 no pixel do array lido

Já se o formato for outro, se o PIL estiver instalado, a leitura é feita pelo PIL e neste caso o tipo do pixel é mantido em uint8, de 0 a 255. Veja no exemplo a seguir

Leitura de imagem em níveis de cinza de imagem TIFF:

Como a imagem lida é TIFF, o array lido fica no tipo uint8, com valores de 0 a 255


In [2]:
f = mpimg.imread('../data/cameraman.tif')
print(f.dtype,f.shape,f.max(),f.min())


uint8 (256, 256) 251 0

Leitura de imagem colorida formato TIFF

Quando a imagem é colorida e não está no formato png, matplotlib utiliza PIL para leitura. O array terá o tipo uint8 e o shape do array é organizado em (H, W, 3).


In [3]:
fcor = mpimg.imread('../data/boat.tif')
print(fcor.dtype,fcor.shape,fcor.max(),fcor.min())


uint8 (257, 256, 3) 218 0

Leitura de imagem colorida formato png

Se a imagem está no formato png, o matplotlib mapeia os pixels de 0 a 255 para float de 0 a 1.0


In [4]:
fcor2 = mpimg.imread('../data/boat.tif')
print(fcor2.dtype, fcor2.shape, fcor2.max(), fcor2.min())


uint8 (257, 256, 3) 218 0

Mostrando as imagens lidas


In [6]:
%matplotlib inline
plt.imshow(f, cmap='gray')
plt.colorbar()


Out[6]:
<matplotlib.colorbar.Colorbar at 0x10f0cafd0>

In [7]:
plt.imshow(fcor)
plt.colorbar()


Out[7]:
<matplotlib.colorbar.Colorbar at 0x1124e9828>

In [8]:
plt.imshow(fcor2)
plt.colorbar()


Out[8]:
<matplotlib.colorbar.Colorbar at 0x112a332e8>

Observe que o display mostra apenas a última chamada do imshow


In [10]:
plt.imshow(fcor2)
plt.imshow(fcor)
plt.imshow(f, cmap='gray')


Out[10]:
<matplotlib.image.AxesImage at 0x112d2e908>

In [ ]: