Las fotografías de estelas de estrellas son muy impactantes. Muestran el movimiento de las estrellas sobre objetos estáticos que no suelen cambiar de posición. Existen varias formas de crearlas, como tomando una foto de larga exposición, de entre 20 minutos y 1 hora, pero esto nos creará una foto más luminosa cuanto más tiempo lo tengamos. Otra manera de crear una fotografía de estelas de estrellas es tomando muchas fotos de entre 15 y 20 segundos de exposición y uniéndolas todas en una utilizando algún programa, como StarStaX. Este en concreto es de código cerrado y su última actualización fue en 2014.

En este tutorial os vamos a enseñar cómo combinar todas las fotografías usando un pequeño programa escrito en Python que da el mismo resultado, de código abierto y que funciona en todas las plataformas. El código es el siguiente:

"""
Copyright 2019 Manuel Alcaraz
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""

import argparse
import os

from PIL import Image, ImageChops
from tqdm import tqdm


def main():
parser = argparse.ArgumentParser(description="Create a star trail from images")
parser.add_argument("-i", "--input", required=True, help="Input directory")
parser.add_argument("-o", "--output", required=True, help="Final image name")

args = parser.parse_args()

images = [os.path.join(args.input, x) for x in os.listdir(args.input)]

result = Image.open(images[0])

for i in tqdm(range(1, len(images) - 1)):
image = Image.open(images[i])
result = ImageChops.lighter(result, image)

result.save(args.output)


if __name__ == "__main__":
main()

Ver código en GitHub

Para poder utilizarlo tenemos que guardarlo en nuestro ordenador. Accede al enlace de arriba y pulsa en el botón RAW para descargarlo. Guárdalo en la carpeta que desees, pero que no sea la que contenga las fotos a procesar. Necesitas tener algunas librerías de Python instaladas, en concreto, Pillow, para procesar las imágenes y tqdm para mostrar una barra de progreso. Para instalarlas, ejecuta el siguiente comando:

$ pip3 install --user Pillow tqdm

Después, abre una consola y ejecútalo de la siguiente manera:

python3 startrail.py -i XXX -o YYY

Reemplaza XXX por el directorio donde estén únicamente las imágenes a procesar, e YYY por el nombre del archivo de imagen de salida, como imagen.png

Cómo funciona

Para crear la fotografía final, el programa compara cada píxel de cada imagen y escoge el que sea más brillante, creando una nueva foto que tiene todos los puntos de las estrellas.

Imagen de portada | Luca Iaconelli en Unsplash