Color promedio de una imagen
Los científicos han podido determinar el color promedio del universo, pero ¿en cuántos bytes podemos encontrar el color promedio de una imagen?
Tu tarea
Su entrada será una sola imagen que necesitará para encontrar el promedio de los colores en la imagen y generar una cadena de color hexadecimal ( #??????
). La imagen puede tener cualquiera de los siguientes formatos
- JPEG / JFIF
- JPEG 2000
- PELEA
- GIF
- BMP
- PNG
- PNM
- PPM
La entrada también se puede tomar como una URL / URI a la imagen.
Las funciones integradas que calculan promedios o muestrean la imagen de una vez, como por ejemplo, ImageMeasurements
no están permitidas.
Ejemplos
Los resultados diferirán ligeramente dependiendo de cómo calcule el promedio y qué modelos de color use. He agregado valores RGB y LCH (HSV) para las imágenes a continuación.
salida: #53715F
RGB, también puede ser #3B7D3D
LCH (HSV)
salida: #8B7D41
RGB, #96753C
LCH (HSV)
fuente
95.6...
que ha redondeado95
en la salida especificada.Respuestas:
Pyth -
2322191816 bytesTranspone para obtener todos los canales, luego suma, divide y hexifica cada uno. Termina concatenando y anteponiendo a
#
.Toma un nombre de archivo de imagen (cualquier tipo) de stdin y lo envía a stdout. Muy lento .
Ejecución de la muestra
fuente
PIL
biblioteca para manejar imágenes. Busque aquí la fuente exacta.Bash, 46 bytes
ImageMagick escala la imagen a un píxel que contiene el promedio de los colores de la imagen y luego la muestra como texto.
fuente
MATLAB - 68 bytes
La imagen se lee en
imread
combinación conuigetfile
para abrir una GUI para elegir la imagen que desea cargar. La suposición con este código es que todas las imágenes son RGB, y para calcular el color promedio, sumamos cada canal individualmente y luego dividimos por tantos elementos como haya en un canal, que es el número total de píxeles en la imagen RGB ( ) dividido por 3. Debido a que el promedio posiblemente puede generar valores de coma flotante, se requiere una llamada a para redondear el número hacia cero . combinado con la cadena de formato hexadecimal ( ) se usa para imprimir cada valor entero en el promedio en su equivalente hexadecimal. Sin embargo, existe para garantizar que un 0 adicional se rellene a la izquierda si el valor promedio de cualquier canal es menor que 16numel
(I)
fix
sprintf
%x
02
* .Ejecuciones de muestra
Lo bueno de esto
imread
es que puedes leer imágenes directamente desde las URL. Como ejemplo reproducible, supongamos que ha descargado las imágenes en su computadora y ha ejecutado el código anterior ... pero para una demostración, leeré las imágenes directamente de Code Golf:Primera imagen
Segunda imagen
* Nota: Este fue un esfuerzo de colaboración realizado por los usuarios de StackOverflow en la sala de chat de MATLAB y Octave .
fuente
CJam, 27 bytes
Esto leyó una imagen PPM de STDIN.
CJam no tiene procesamiento de imagen incorporado, por lo que este código espera un PixMap portátil ASCII (número mágico P3) con una paleta completa de 24 bits (valor máximo 255) y sin comentarios.
Prueba de funcionamiento
Cómo funciona
fuente
HTML5 + JavaScript (ES6), 335 bytes
Esto no va a ganar, pero me divertí haciéndolo de todos modos.
Utiliza la API HTML5 Canvas . La entrada es una URL de una imagen habilitada para CORS .
Manifestación
Como es ES6, actualmente solo funciona en Firefox y Edge.
fuente
new Image
conImage()
?TypeError: Constructor Image requires 'new'
W='width'
yH='height'
usari[H]
oi[W]
Python [3] + SciPy,
144133121Carga datos de píxeles, sumas para cada canal, divide por tamaño *, formatos. Los valores se redondean hacia cero.
* tamaño = ancho * alto * canales, multiplicado por 3
fuente
input()
para tomar el camino? Te ahorrará 20 bytes.import scipy
. Cambiarm.imread
amisc.imread
.NameError: name 'misc' is not defined
. Probadofrom scipy import*
, tampoco funciona.from scipy import sum, misc as m
? Ahorras cuando usas la suma también, entonces.R, 90 bytes
La ruta al archivo PNG se lee desde STDIN. El paquete
png
necesita ser instalado.Paso a paso:
fuente
C, 259 bytes
Toma un archivo PPM sin comentarios .
Proceso
Código inicial:
Recorte las variables y elimine el bucle:
A partir de ahí, combiné varias declaraciones en una sola declaración de devolución. Se eliminó junto con cualquier otra información de tipo extraño, se cambió el nombre de las variables y se cortó el espacio en blanco.
fuente
Cobra - 371
fuente
Java,
449447446430426 bytesGracias a esta respuesta sobre el desbordamiento de pila para el
String.format
truco.fuente