Manejo básico de imágenes#

  • Ultima modificación: Feb 04, 2024 | YouTube

[1]:
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
[2]:
#
# Una imagen RGB PNG es representada coomo un array de 3 dimensiones que
# indican los colornes [R, G, B] de cada pixel.
#
org_img = np.asarray(Image.open("assets/stinkbug.png"))

# Dimensiones de la imagen
print(org_img.shape)

# Representación como un array de NumPy
print(repr(org_img))
(808, 1088, 3)
array([[[108, 108, 108],
        [108, 108, 108],
        [108, 108, 108],
        ...,
        [112, 112, 112],
        [112, 112, 112],
        [112, 112, 112]],

       [[108, 108, 108],
        [108, 108, 108],
        [108, 108, 108],
        ...,
        [113, 113, 113],
        [113, 113, 113],
        [112, 112, 112]],

       [[108, 108, 108],
        [108, 108, 108],
        [108, 108, 108],
        ...,
        [113, 113, 113],
        [113, 113, 113],
        [112, 112, 112]],

       ...,

       [[108, 108, 108],
        [109, 109, 109],
        [109, 109, 109],
        ...,
        [116, 116, 116],
        [116, 116, 116],
        [116, 116, 116]],

       [[108, 108, 108],
        [108, 108, 108],
        [109, 109, 109],
        ...,
        [116, 116, 116],
        [116, 116, 116],
        [116, 116, 116]],

       [[108, 108, 108],
        [108, 108, 108],
        [108, 108, 108],
        ...,
        [116, 116, 116],
        [116, 116, 116],
        [116, 116, 116]]], dtype=uint8)
[3]:
org_img.shape
[3]:
(808, 1088, 3)
[4]:
plt.figure(figsize=(4, 4))
plt.imshow(org_img)
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_4_0.png
[5]:
#
# Aplicación de un seudocolor para mejorar el contraste
#
lum_img = org_img[:, :, 0]
lum_img
[5]:
array([[108, 108, 108, ..., 112, 112, 112],
       [108, 108, 108, ..., 113, 113, 112],
       [108, 108, 108, ..., 113, 113, 112],
       ...,
       [108, 109, 109, ..., 116, 116, 116],
       [108, 108, 109, ..., 116, 116, 116],
       [108, 108, 108, ..., 116, 116, 116]], dtype=uint8)
[6]:
plt.figure(figsize=(4, 4))
plt.imshow(lum_img)
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_6_0.png
[7]:
#
# Aplicación de una luminosidad
#
plt.figure(figsize=(4, 4))
plt.imshow(lum_img, cmap="hot")
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_7_0.png
[8]:
#
# Cambio de colormap de un objeto existente
#
plt.figure(figsize=(4, 4))
plt.imshow(lum_img).set_cmap("nipy_spectral")
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_8_0.png
[9]:
#
# Escala de color de referencia
#
plt.figure(figsize=(4, 4))
plt.imshow(lum_img)
plt.colorbar()
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_9_0.png
[10]:
#
# Examinación de un rango de datos
#
plt.figure(figsize=(4, 3.5))
plt.hist(lum_img.ravel(), bins=range(256), fc="k", ec="k")
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_10_0.png
[11]:
#
# Se resalta la información del rango del pico
#
plt.figure(figsize=(4, 4))
plt.imshow(lum_img, clim=(0, 175))
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_11_0.png
[12]:
#
# Esta misma tarea puede ser realizada con set_clim()
#
plt.figure(figsize=(4, 4))
plt.imshow(lum_img).set_clim(0, 175)
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_12_0.png
[13]:
#
# Redimensionamiento de la imagen e interpolacion (nearest)
#
plt.figure(figsize=(4, 4))
org_img = Image.open("assets/stinkbug.png")
org_img.thumbnail((64, 64))
plt.imshow(org_img)
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_13_0.png
[14]:
#
# Interpolación bilineal
#
plt.figure(figsize=(4, 4))
plt.imshow(org_img, interpolation="bilinear")
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_14_0.png
[15]:
#
# Interpolación bicubica
#
plt.figure(figsize=(4, 4))
plt.imshow(org_img, interpolation="bicubic")
plt.show()
../../_images/01_matplotlib_notebooks_08_manejo_de_imagenes_15_0.png