Couleur moyenne d'une image
Les scientifiques ont pu déterminer la couleur moyenne de l'univers mais en combien d'octets pouvons-nous trouver la couleur moyenne sur une image?
Ta tâche
Votre entrée sera une seule image dont vous aurez besoin pour trouver la moyenne des couleurs dans l'image et produire une chaîne de couleurs hexadécimale ( #??????
). L'image peut être l'un des formats suivants
- JPEG / JFIF
- JPEG 2000
- TIFF
- GIF
- BMP
- PNG
- PNM
- PPM
L'entrée peut également être considérée comme une URL / URI de l'image.
Fonctions intégrées qui calculent des moyennes ou échantillonnent l'image à la fois comme celles ImageMeasurements
qui ne sont pas autorisées.
Exemples
Les résultats différeront légèrement selon la façon dont vous calculez la moyenne et les modèles de couleurs que vous utilisez. J'ai ajouté des valeurs RVB et LCH (HSV) pour les images ci-dessous.
sortie: #53715F
RVB, peut également être #3B7D3D
LCH (HSV)
sortie: #8B7D41
RGB, #96753C
LCH (HSV)
la source
95.6...
, que vous avez arrondi à95
dans la sortie spécifiée.Réponses:
Pyth -
2322191816 octetsTranspose pour obtenir tous les canaux, puis additionne, divise et hexifie chacun. Termine en concaténant et en préfixant a
#
.Prend un nom de fichier image (de tout type) de stdin et le renvoie vers stdout. TRÈS LENT .
Exemple d'exécution
la source
PIL
bibliothèque pour gérer les images. Recherchez ici la source exacte.Bash, 46 octets
ImageMagick redimensionne l'image à un pixel qui contient la moyenne des couleurs de l'image, puis la renvoie sous forme de texte.
la source
MATLAB - 68 octets
L'image est lue avec
imread
combinée avecuigetfile
pour ouvrir une interface graphique pour choisir l'image que vous souhaitez charger. L'hypothèse avec ce code est que toutes les images sont RVB, et pour calculer la couleur moyenne, nous additionnons individuellement sur chaque canal puis divisons par autant d'éléments qu'il y en a dans un canal, ce qui correspond au nombre total de pixels dans l'image RVB ( ) divisé par 3. Étant donné que la moyenne peut éventuellement générer des valeurs à virgule flottante, un appel à est requis pour arrondir le nombre à zéro . combiné avec la chaîne de formatage hexadécimal ( ) est utilisé pour imprimer chaque valeur entière dans la moyenne dans son équivalent hexadécimal. Cependant, le est là pour garantir qu'un 0 supplémentaire est rempli vers la gauche si la valeur moyenne d'un canal est inférieure à 16.numel
(I)
fix
sprintf
%x
02
* .Exemples de cycles
Ce qui est bien,
imread
c'est que vous pouvez lire des images directement à partir des URL. À titre d'exemple reproductible, supposons que vous ayez téléchargé les images sur votre ordinateur et exécuté le code ci-dessus ... mais pour démonstration, je vais lire les images directement à partir de Code Golf:Première image
Deuxième image
* Remarque: Il s'agit d'un effort de collaboration réalisé par les utilisateurs de StackOverflow sur la salle de chat MATLAB et Octave .
la source
CJam, 27 octets
Cela a lu une image PPM de STDIN.
CJam n'a pas de traitement d'image intégré, donc ce code attend un PixMap portable ASCII (nombre magique P3) avec une palette complète de 24 bits (valeur maximale 255) et aucun commentaire.
Essai
Comment ça marche
la source
HTML5 + JavaScript (ES6), 335 octets
Ça ne va pas gagner mais j'ai quand même eu du plaisir à le faire.
Utilise l' API HTML5 Canvas . L'entrée est l'URL d'une image compatible CORS .
Démo
Comme il s'agit d'ES6, il ne fonctionne actuellement que dans Firefox et Edge.
la source
new Image
parImage()
?TypeError: Constructor Image requires 'new'
W='width'
etH='height'
utiliseri[H]
oui[W]
Python [3] + SciPy,
144133121Charge les données de pixels, additionne pour chaque canal, divise par taille *, formats. Les valeurs sont arrondies vers zéro.
* taille = largeur * hauteur * canaux, ainsi multiplié par 3
la source
input()
pour prendre le chemin? Cela vous fera économiser 20 octets.import scipy
. Remplacezm.imread
parmisc.imread
.NameError: name 'misc' is not defined
. Essayéfrom scipy import*
, ne fonctionne pas non plus.from scipy import sum, misc as m
? Vous économisez également lorsque vous utilisez sum.R, 90 octets
Le chemin vers le fichier PNG est lu depuis STDIN. Le package
png
doit être installé.Pas à pas:
la source
C, 259 octets
Prend un fichier PPM sans commentaires .
Processus
Code initial:
Couper les variables et supprimer la boucle:
De là, j'ai combiné les différentes déclarations en une seule déclaration de retour. Supprimé et toutes les autres informations de type superflues, renommé les variables et coupé l'espace.
la source
Cobra - 371
la source
Java,
449447446430426 octetsMerci à cette réponse sur débordement de pile pour l'
String.format
astuce.la source