Celui-ci est simple à décrire et je pouvais à peine croire que cela n'avait pas été joué auparavant:
Pour une image donnée (quel que soit le format pris en charge par votre langue), recherchez les couleurs uniques et affichez une liste des couleurs.
- Imprimez le code couleur en RVB hexadécimal, c'est-à-dire un signe de hachage
#
suivi de 2 chiffres pour R, 2 chiffres pour G et 2 chiffres pour B. (#xxxxxx
où x peut être 0-9, AF et / ou af). - Le code hexadécimal doit être suivi d'un espace
et du nombre de pixels décimaux, puis d'une nouvelle ligne (
\n
ou\r\n
). - La liste doit être triée par nombre décroissant (couleur la plus fréquente en haut).
- S'il y a une cravate (deux couleurs avec le même montant), la commande n'est pas importante.
- L'image ne contiendra pas de transparence, donc aucune valeur alpha n'est importante. La valeur alpha peut ne pas faire partie de la sortie.
- Une taille d'image de 4000x3000 doit être prise en charge (ce qui peut être important pour les définitions de type)
Exemple d'image "10 rouge 20 bleu 30 noir 40 blanc":
Production attendue:
#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10
Exemple d'image "dégradé bleu":
L'une des sorties attendues (puisque l'ordre des mêmes couleurs peut varier):
#718DFF 19
#5571FF 15
#3855FF 11
#8DAAFF 11
#1C38FF 7
#AAAAFF 7
#8D8DFF 6
#AAC6FF 6
#C6C6FF 5
#C6E2FF 4
#001CFF 3
#E2E2FF 3
#FFFFFF 3
Exemple d'image "testImage", aimablement fournie par @Luis Mendo :
Production attendue:
#FFFFFF 18042
#000000 1754
#FF3300 204
Similaire à cette question , mais la sortie est du texte, pas une image.
code-golf
image-processing
color
Thomas Weller
la source
la source
count descending
est un peu flou. Comment le trions-nous?the most frequent colors at the top
?Réponses:
Mathematica, 91 octets
Utilise une méthode complètement différente de @ réponse de DavidC . Contrairement à celui-ci, cela peut prendre en charge des images de n'importe quelle taille et nombre de couleurs. Explication:
la source
Bash + coreutils, 54
Cela suppose l'entrée STDIN du format .txt d' Imagemagick .
Ideone.
Si le format d'entrée ci-dessus est trop extensible, nous pouvons ajouter la conversion Imagemagick à partir de n'importe quel format:
Bash + coreutils + Imagemagick, 71
Ici, le nom de fichier de l'image d'entrée est transmis en tant que paramètre de ligne de commande.
la source
,
awk
partie:awk '$0=$2" "$1'
.JavaScript (ES6),
359355 octets4 octets enregistrés grâce à @Neil
Démo
Autres cas de test que j'ai téléchargés sur imgur pour prendre en charge CORS:
Les données de couleur spécifiques sur ces deux semblent avoir légèrement changé lors du téléchargement pour une raison quelconque, mais elles affichent toujours le même nombre d'occurrences pour ces deux cas de test.
la source
|
que la priorité est plus faible que<<
si vous l'utilisez plutôt que+
vous n'aurez pas besoin d'autant de()
s.<!-- language: lang-js -->
de l'extrait de code, désactivant efficacement le JavaScript.u=>{document.write`<img src=${u} id=i><canvas id=e>`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
Pyth , 29 octets
Essayez-le en ligne!
(L'interprète en ligne ne peut pas lire l'image, j'ai donc retiré cette partie et entré le résultat de la lecture de cette image, qui est une liste de triplets de couleurs. La partie responsable de la lecture de l'image est
'
un seul deux-points.)Preuve de fonctionnalité d'
'
un seul colonla source
s
avant'Q
, car une image est représentée comme une liste de listes de triplets.V_SrS%L+\#*3"%02X"s'z8jd_N
Mathematica
10392 octetsExemple
Explication
DominantColors
renvoie normalement une liste de couleurs et de décomptes représentant les principaux clusters dans une image. Lorsque le nombre de couleurs demandées dépasse le nombre de couleurs dans l'image, les couleurs de pixels exactes sont renvoyées. (Je suppose que moins de 10 000 couleurs seront dans l'image d'entrée.){"#"<>IntegerString[255Round[List@@#],16,2],#2}
convertit les valeurs de couleur de base 10 en valeurs hexadécimales.Remarque: il n'y a que 5 couleurs dans l'image de mandrill. (J'avais l'habitude
ColorQuantize[<image>,5]
de réduire le nombre de couleurs dans l'image de mandrill standard.)la source
PowerShell v2 +, 187 octets
Réutilise presque tout le code de ma réponse sur Obtenir la couleur la plus dominante . Veuillez donc faire référence à cela pour une explication complète.
Les changements ici sont en indexation
$b
dans la troisième ligne pour répondre aux besoins explicites de format de sortie, et dans la dernière ligne que noussort
parvalue
en-des
ordre cending, puis conduit àFormat-Table
des-H
ideTableHeaders et-A
utoSize comme paramètres. Il est très rare de l'utiliserFT
ici sur PPCG, car la sortie est implicite à la fin de l'exécution, mais ici, il est très utile de s'assurer que nous n'obtenons que la sortie correcte des pièces.Exemples
La première est l'image de test "rouge" du défi Dominant Color, la seconde est le "témoignage" de ce défi.
la source
Tcl / Tk , 134 octets
d
est pourdata
.Tcl / Tk , 232 octets
wish sort_pix.tcl QTE4O.png
wish sort_pix.tcl 5s1Ob.png
wish sort_pix.tcl z07VA.gif
la source
Brain-Flak , 1110 octets
Essayez-le en ligne!
C'était une aventure. Il s'avère que Brain-Flak n'est pas très bon en traitement d'image. Qui savait?
Je commencerai par noter que cela ne correspond pas techniquement au format de sortie strict demandé. Si vous voulez que cela soit appliqué, faites le moi savoir et j'essaierai d'ajouter du code de traduction. Pour l'instant, il affiche des nombres décimaux: chaque 4 chiffres représente une couleur dans l'ordre RED GREEN BLUE COUNT.
Ensuite, entrez. Les formats d'entrée autorisés étaient plus flexibles, j'ai donc utilisé le format le plus facile à analyser par Brain-Flak (que j'ai pu trouver): Netpbm P6. Malheureusement, Brain-Flak n'a pas pu analyser les nombres décimaux du format P3 car toutes les images Netpbm commencent par le caractère
P
et Brain-Flak ne peut pas gérer l'entrée décimale à partir de fichiers contenant des caractères non numériques. P6 a donc été utilisé à la place, car P6 stocke les informations de couleur sous forme d'octets, qui sont traités comme des nombres en mode d'entrée ASCII. Il restait un défi car les informations d'en-tête étaient pas codées de manière utile, mais heureusement, je n'avais pas besoin de ces informations, elles sont donc simplement supprimées. Ce programme n'adhère pas entièrement à la norme Netpbm car il n'autorise pas les sauts de ligne dans l'en-tête, mais les sauts de ligne ne sont pasrequis par la norme pour que les entrées soient des fichiers Netpbm valides.Dernière mise en garde, la version sur TIO n'est en fait pas correctement configurée pour un fonctionnement "officiel" car (à ma connaissance) je ne peux pas fournir de fichiers en entrée sur TIO, ni fournir des octets correspondant à ASCII non imprimable dans l'entrée directe. Pour un fonctionnement officiel, l'
-a
indicateur est nécessaire pour prendre l'entrée en octets bruts et-f
pour prendre l'entrée d'un fichier. L'exemple d'entrée sur le lien TIO a plutôt été traduit manuellement à partir de l'exemple sur la page wiki Netpbm .De plus, je voudrais remercier le wiki Brain-Flak d'avoir fourni des extraits de code utiles à partir desquels travailler. En particulier, l'implémentation Bubble-Sort ici a joué un rôle déterminant dans la dernière étape une fois que j'ai obtenu un compte pour chaque couleur, car je ne savais pas vraiment par où commencer autrement. Il a fallu de lourdes modifications, mais je suis content de ne pas avoir à repartir de zéro.
Voici la version non golfée et commentée du code. Brain-Flak est un peu trop bavard pour inclure une explication formatée dans cet article, mais la version non golfée sur TIO contient tout ce que j'inclurais en un avec un meilleur formatage que je ne pourrais gérer ici, donc si vous êtes intéressé, veuillez prendre un Regardez.
Il y a peut-être encore du golf à faire, ma réponse précédente de Brain-Flak a subi de nombreuses révisions, mais j'espère que les leçons apprises là-bas ont donné un meilleur point de départ.
la source
Python 2, 186 octets
Essayez-le en ligne!
Avis de non-responsabilité: les résultats présentés sont des lignes simples pour la lisibilité. Les sorties de code résultent avec un espace et une séparation de ligne comme demandé par le défi.
Sortie pour 10 rouge 20 bleu 30 noir 40 blanc:
Sortie pour dégradé bleu:
Sortie pour l'image de test
Explication:
la source
Java (1.4+) ,
483428 octetsEssayez-le en ligne!(Ne fonctionne pas en ligne)Non golfé:
Les
toString()
sorties de carte comme ceci:S'il vous plaît ne postez pas de suggestions de golfs spécifiques à 1.8, à moins que cela ne fonctionne dans Java plus ancien, je n'en veux pas.
Exemple: Lambdas ne fonctionne pas dans plus de versions de Java qu'elles n'en fonctionnent.
la source
import java.util.*;class M{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString((c&0xff0000)>>16)+x.toHexString((c&0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1))c=i.getRGB(x++,y);System.out.print(m);}}
( 419 octets )x.toHexInteger
était plus intelligent qu'une importation statique.SmileBASIC, 165 octets
L'image est donnée sous la forme d'un tableau de valeurs de couleur ARGB 32 bits (la valeur alpha est coupée lorsque le nombre est converti en une chaîne hexadécimale à 6 chiffres)
la source