Cargando uma imagen

Para probar estas funciones vamos a utilizar esta bonita foto sacada en el archipiélago de Fernando de Noronha, Brasil. Si la abrimos con cualquier aplicación que tengamos en nuestro ordenador (tipo "Paint" o semejante) vemos el aspecto que tiene:

Puesta de sol en Fernando de Noronha (Brasil)

La función que nos permite cargar una imagen es matplotlib.pyplot.imread. Admite como primer parámetro, fname, una referencia a la imagen a leer, pudiendo ser el nombre de un fichero, una URL o un objeto python representando un fichero. El segundo parámetro, format, opcional, es el formato de la imagen.

img = plt.imread("https://www.interactivechaos.com/sites/default/files/data/sunset.png")

El resultado de la función plt.imread -almacenado en la variable img del código anterior- es un array NumPy con el siguiente tamaño:

  • (m, n) para imágenes en blanco y negro
  • (m, n, 3) para imágenes RGB
  • (m, n, 4) para imágenes RGBA (RGB con canal alfa, o canal de transparencia)

Confirmemos el tipo de la variable img y el tamaño de la imagen leída:

print(type(img))
print(img.shape)

<class 'numpy.ndarray'>
(600, 800, 4)

Efectivamente se trata de un array NumPy. Pero las dimensiones parecen no encajar con lo que vemos: la imagen es más ancha que alta, y sin embargo las dimensiones del array son (600, 800, 4). Para explicar esto debemos recordar que, en un array bidimensional NumPy, el primer eje es el correspondiente a las filas (eje vertical) y el segundo el correspondiente a las columnas (eje horizontal), exactamente al contrario de como solemos interpretar el tamaño de una imagen (siempre damos primero el ancho -el número de columnas- y después el alto -el número de filas-).

Vemos también en el último código ejecutado que la imagen leída es de tipo RGBA (RGB con canal de transparencia).