Primer proyecto: Cuenta colores

Repo: https://github.com/umarquez/100DaysOfC0D3/tree/master/10-color-counter

Porque un #100DaysOfCode no está completo sin proyectos, vamos a realizar una aplicación que de momento pudiera parecer inútil, pero que en el transcurso de la serie iremos mejorando para que nos ayude a realizar tareas más complejas.

Descripción

Vamos a programar una aplicación de línea de comandos que nos ayude a contar los diferentes colores que componen una imagen, será de manera similar como lo hicimos con el conteo de palabras, pero recorriendo cada píxel de la imagen; al final, deberemos obtener como resultado un resumen que podremos almacenar en un archivo o mostrarlo en pantalla directamente.

Datos de entrada

Necesitamos recibir:

  • -img Ubicación del archivo de imagen a procesar, si está vacío se tomará una imagen aleatorio de una API, misma que será almacena en ./temp/con un nombre basado en la fecha/hora de descarga.
  • -out Nombre del archivo de salida, si se omite la salida será en pantalla.

Procesamiento

una vez obtenida la imagen a procesar, leeremos su contenido y comenzaremos a recorrer los píxeles que la conforman, almacenando el conteo de cada color en una tabla hash (hash table). En seguida deberemos agregar cada color obtenido en un árbol binario de búsqueda (search binary tree), que nos ayudará ordenar los colores por la frecuencia de aparición.

Finalmente, recorreremos cada elemento almacenado en el orden que lo indique el árbol binario para ir conformando el reporte final, este reporte será un objeto que posteriormente escribiremos en formato JSON de acuerdo al parámetro -out.

Adicionalmente mediremos el tiempo que nos ha tomado realizar el conteo.

Podríamos utilizar esta aplicación para analizar los cambios que un algoritmo de compresión (como JPEG) realiza sobre una imagen, analizar si una imagen ha sido modificada o retocada o incluso para tratar de extraer la paleta de colores utilizada.