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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Píxel | un punto de la imagen, guardado como números | |
| Resolución | el ancho y el alto de la imagen, en píxeles | 320 × 240 |
| Modo | cómo se guardan los números de cada píxel | RGB o L |
| Canal | cada número de un píxel: rojo, verde o azul | |
| Matriz | números en filas y columnas (array en NumPy) | |
| Nivel de gris | un 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 0 | Columna 1 | Columna 2 | Columna 3 | |
|---|---|---|---|---|
| Fila 0 | 10 | 40 | 40 | 200 |
| Fila 1 | 10 | 40 | 220 | 250 |
| Fila 2 | 10 | 30 | 40 | 60 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lee un píxel con dos índices
# 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
docker exec jupyter python3 steps/look.pySe 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
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?