python

Reflejo horizontal a imagen con Python

En este post de trabajo con imágenes en Python te mostraré cómo aplicar un reflejo horizontal a una imagen, de modo que podamos voltear la imagen de manera horizontal. Para ello vamos a trabajar con los pixeles de la imagen.

La asignación dice así:

Con este filtro queremos lograr el mismo resultado que un espejo, por lo que cualquier píxel ubicado al izquierdo ahora deberá estar en el derecho y viceversa. Se mantendrán todos los píxeles originales, solo que están organizados de manera diferente.

Entonces veamos cómo hacerlo usando Python, numpy e imageio.

Requisitos

Necesitas Python y PIP. Cuando tengas pip instala numpy e imageio con: pip install numpy imageio

No es obligatorio usar numpy (pero el ejercicio sí lo requiere, así que lo he usado), basta con imageio para obtener los pixeles de la imagen como una matriz así como lo hice cuando trabajé con esteganografía en Python.

Vamos a trabajar con una imagen BMP pero cualquier imagen que pueda ser convertida a matriz debería funcionar.

El algoritmo

Con el enfoque que vamos a usar para aplicar el espejo o reflejo horizontal a una imagen con Python básicamente trabajaremos con una matriz.

Esta matriz es de 2 dimensiones, y cada valor que tiene a su vez es una lista con 3 valores que representan el Red, Green y Blue del pixel.

Entonces haremos lo que hacíamos hace tiempo con C para invertir una cadena (para que notes cómo algoritmos tan simples sirven para cosas más complejas), que es recorrer la matriz desde el inicio hasta la mitad, y en cada paso intercambiar el extremo actual por el extremo opuesto.

De modo que vamos a ir fila por fila. Y en cada fila vamos a tomar el pixel 1 para intercambiarlo con el último pixel, luego el segundo pixel con el penúltimo y así hasta llegar a la mitad.

Código para reflejo horizontal en Python

Lo que expliqué anteriormente para modificar la imagen y girarla como si fuera un espejo queda así en código Python:

def reflejo_horizontal(nombre_imagen):
    matriz = leer_imagen(nombre_imagen)
    ancho = len(matriz[0])
    alto = len(matriz)
    for y in range(alto):
        for x in range(int(ancho/2)):
            indice_opuesto = ancho - x - 1
            opuesto = matriz[y][indice_opuesto]
            actual = matriz[y][x]
            matriz[y][indice_opuesto] = actual
            matriz[y][x] = opuesto
    return matriz

Y para usarlo necesitamos unas funciones que convierten la imagen a matriz. Entonces el código completo queda así:

"""
    https://parzibyte.me/blog
"""
import numpy as np
import imageio
NOMBRE_IMAGEN = "travel.bmp"


def leer_imagen(ruta):
    return np.array(imageio.imread(ruta), dtype='int').tolist()


def guardar_imagen(ruta, matriz):
    return imageio.imwrite(ruta, np.array(matriz, dtype="uint8"))


def reflejo_horizontal(nombre_imagen):
    matriz = leer_imagen(nombre_imagen)
    ancho = len(matriz[0])
    alto = len(matriz)
    for y in range(alto):
        for x in range(int(ancho/2)):
            indice_opuesto = ancho - x - 1
            opuesto = matriz[y][indice_opuesto]
            actual = matriz[y][x]
            matriz[y][indice_opuesto] = actual
            matriz[y][x] = opuesto
    return matriz


guardar_imagen("travel_reflejo.bmp", reflejo_horizontal(NOMBRE_IMAGEN))

Al ejecutarlo funciona correctamente y con cualquier tipo de imágenes, siempre y cuando sea un BMP de 24 bits.

Reflejo horizontal (espejo) a imagen con Python e imageio – Trabajo con imágenes

De este modo podemos aplicar un reflejo horizontal a una imagen usando únicamente Python, modificando los pixeles de la imagen.

Por aquí te dejo más tutoriales de Python.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.