¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Qué es un píxel en una imagen digital

Después de esta lección: Puedo leer una imagen como una matriz de números.

Lección de 60 min2 comandosLaboratorio de visión por computador: píxeles, umbrales y recuento de objetos en JupyterLab

Un píxel es un punto de la imagen

Un píxel es el punto más pequeño de una imagen digital, y se guarda como un número o como tres. Una imagen entera es una matriz de números, y con código puedes leerla y medirla.

La cámara de tu móvil hace justo eso cada vez que haces una foto.

Al final de esta lección

Nota

Puedo leer una imagen como una matriz de números.

Palabras clave

PalabraQué significaEjemplo
Píxelun punto de la imagen, guardado como números
Resoluciónel ancho y el alto de la imagen, en píxeles320 × 240
Modocómo se guardan los números de cada píxelRGB o L
Canalcada número de un píxel: rojo, verde o azul
Matriznúmeros en filas y columnas (array en NumPy)
Nivel de grisun número de 0 (negro) a 255 (blanco)

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una imagen es una cuadrícula de píxeles

Una imagen digital se parece a una hoja de papel cuadriculado. Cada cuadrito es un píxel y guarda cuánta luz hay en ese punto.

El número de cuadritos a lo ancho y a lo alto es la resolución. Una imagen de 4 columnas y 3 filas mide 4 × 3 y tiene 12 píxeles.

Ejemplo resuelto: 12 píxeles en una matriz

Columna 0Columna 1Columna 2Columna 3
Fila 0104040200
Fila 11040220250
Fila 210304060

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Lee un píxel con dos índices

Código: python
# Una imagen pequeña: 3 filas y 4 columnas de niveles de gris.
# Los nombres del código van en inglés, como en casi todos los programas.
picture = [
    [10, 40, 40, 200],
    [10, 40, 220, 250],
    [10, 30, 40, 60],
]
row = 1
column = 2
print("alto:", len(picture), "ancho:", len(picture[0]))
print("el píxel de la fila", row, "y la columna", column, "vale", picture[row][column])
# Cambia row y column para leer otro píxel.
# Prueba column = 4: da un error, porque la última columna es la 3.

Un píxel de color tiene tres canales

En una imagen en color, cada píxel guarda tres números, uno por canal: rojo, verde y azul. Cada número va de 0 a 255.

Esta forma de guardar se llama modo RGB. En el modo L cada píxel tiene un solo número, un nivel de gris.

Ejemplo resuelto: algunos píxeles RGB

Píxel (rojo, verde, azul)Cómo se ve
(255, 0, 0)Rojo puro
(255, 255, 255)Blanco
(0, 0, 0)Negro
(197, 157, 62)Dorado, como el borde de una moneda

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Qué cuenta el primer script del laboratorio

El laboratorio dibuja una imagen de monedas, coins.png, siempre igual. El script look.py la abre y escribe cinco líneas. Las palabras que imprime están en inglés: size es el tamaño, mode es el modo y pixel at es el píxel en esa posición.

Mide 320 por 240 y su modo es RGB. El píxel en 10, 10 es (35, 35, 35), casi negro: el fondo. El de 50, 50 es (197, 157, 62): una moneda.

Abre la imagen de monedas

Comando
docker exec jupyter python3 steps/look.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cuántos píxeles tiene la imagen

Comando
docker exec jupyter python3 -c "print(320 * 240, 320 * 240 * 3)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una foto pequeña ya son muchos números

La segunda línea imprime 76800 230400. Una imagen de 320 × 240 tiene 76.800 píxeles. En RGB cada uno guarda 3 números, así que son 230.400 números.

Por eso se trabaja con matrices: una orden recorre todos los píxeles de una vez.

Un error muy común

Advertencia

Mucha gente cree que (10, 50) en Pillow y [10][50] en una lista señalan el mismo píxel. Pillow pide primero la columna y después la fila: (x, y). En una lista se pide primero la fila: [fila][columna]. Si los cambias, lees otro punto o te sales de la imagen.

Para ir más lejos: lee otra imagen

Abre JupyterLab desde el laboratorio y haz doble clic en start.ipynb. Ejecuta las celdas una a una con Mayús y Intro.

En la última celda abre road.png y pide su tamaño y su modo. ¿Es RGB o es L? ¿Por qué crees que una carretera se guarda en gris?

Sobre este laboratorio y su código: Laboratorio de visión por computador: píxeles, umbrales y recuento de objetos en JupyterLab

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.