Dieser ist einfach zu beschreiben und ich konnte kaum glauben, dass dies vorher nicht golfen wurde:
Suchen Sie für ein bestimmtes Bild (welches Format auch immer von Ihrer Sprache unterstützt wird) die eindeutigen Farben und geben Sie eine Liste der Farben aus.
- Drucken Sie den Farbcode in hexadezimalem RGB, dh einem Hash-Zeichen,
#
gefolgt von 2 Ziffern für R, 2 Ziffern für G und 2 Ziffern für B. (#xxxxxx
wobei x 0-9, AF und / oder af sein kann). - Auf den Hex-Code folgt ein Leerzeichen
und die Anzahl der Dezimalpixel , gefolgt von einer neuen Zeile (
\n
oder\r\n
). - Die Liste ist nach Anzahl absteigend zu sortieren (häufigste Farbe oben).
- Wenn es ein Unentschieden gibt (zwei Farben mit der gleichen Menge), ist die Reihenfolge nicht wichtig.
- Das Bild enthält keine Transparenz, daher ist ein Alpha-Wert nicht wichtig. Der Alpha-Wert ist möglicherweise nicht Teil der Ausgabe.
- Es muss eine Bildgröße von 4000 x 3000 unterstützt werden (dies kann für Typdefinitionen von Bedeutung sein).
Beispielbild "10red 20blue 30black 40white":
Erwartete Ausgabe:
#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10
Beispielbild "blauer Farbverlauf":
Eine der erwarteten Ausgaben (da die Reihenfolge der gleichen Farben variieren kann):
#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
Beispielbild "testImage", freundlicherweise zur Verfügung gestellt von @Luis Mendo :
Erwartete Ausgabe:
#FFFFFF 18042
#000000 1754
#FF3300 204
Ähnlich wie bei dieser Frage , aber die Ausgabe ist Text, kein Bild.
code-golf
image-processing
color
Thomas Weller
quelle
quelle
count descending
ist ein bisschen unklar. Wie sortieren wir es?the most frequent colors at the top
?Antworten:
Mathematica, 91 Bytes
Verwendet eine völlig andere Methode als die Antwort von @ DavidC . Im Gegensatz zu diesem unterstützt dies Bilder mit beliebiger Größe und Farbanzahl. Erläuterung:
quelle
Bash + Coreutils, 54
Dies setzt die STDIN-Eingabe von voraus TXT-Formats Imagemagick voraus .
Ideone.
Wenn das obige Eingabeformat zu umfangreich ist, können wir die Imagemagick-Konvertierung aus jedem Format hinzufügen:
Bash + Coreutils + Imagemagick, 71
Hier wird der Dateiname des Eingabebilds als Befehlszeilenparameter übergeben.
quelle
,
awk
Teil:awk '$0=$2" "$1'
.JavaScript (ES6),
359-355Byte4 Bytes dank @Neil gespeichert
Demo
Andere Testfälle, die ich zu imgur hochgeladen habe, um CORS zu unterstützen:
Die spezifischen Farbdaten in diesen beiden Fällen scheinen sich beim Hochladen aus irgendeinem Grund geringfügig geändert zu haben, sie werden jedoch für diese beiden Testfälle immer noch in der gleichen Häufigkeit gedruckt.
quelle
|
hat eine niedrigere Priorität als<<
, wenn Sie es stattdessen verwenden,+
dann brauchen Sie nicht so viele()
s.<!-- language: lang-js -->
, indem Sie das JavaScript aus dem Snippet entfernt und so effektiv deaktiviert haben.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 Bytes
Probieren Sie es online!
(Der Online-Interpreter kann das Bild nicht lesen, daher habe ich diesen Teil entfernt und das Ergebnis des Lesens des Bilds eingegeben. Dabei handelt es sich um eine Liste von Farbtripeln. Der Teil, der für das Lesen des Bilds verantwortlich ist
'
, ist ein einzelner Doppelpunkt.)Funktionsnachweis
'
eines einzelnen Doppelpunktesquelle
s
Vorher'Q
, da ein Bild als Liste von Drillingslisten dargestellt wird.V_SrS%L+\#*3"%02X"s'z8jd_N
Mathematica
10392 BytesBeispiel
Erläuterung
DominantColors
Normalerweise wird eine Liste mit Farben und Zählwerten zurückgegeben, die die Hauptcluster in einem Bild darstellen. Wenn die Anzahl der angeforderten Farben die Anzahl der Farben im Bild überschreitet, werden die genauen Pixelfarben zurückgegeben. (Ich gehe davon aus, dass das Eingabebild weniger als 10 000 Farben enthält.){"#"<>IntegerString[255Round[List@@#],16,2],#2}
konvertiert die Basis 10 Farbwerte mit hexadezimalen Werten.Hinweis: Das Mandrill-Bild enthält nur 5 Farben. (Früher habe ich
ColorQuantize[<image>,5]
die Anzahl der Farben im Standard-Mandrill-Bild reduziert.)quelle
PowerShell v2 +, 187 Byte
Verwendet fast den gesamten Code aus meiner Antwort auf Get the dominant color . Beziehen Sie sich bitte darauf, um eine vollständige Erklärung zu erhalten.
Die Änderungen sind hier in der Indizierung
$b
in der dritten Zeile der expliziten Ausgabeformat Anforderungen zu entsprechen, und in der letzten Zeile wirsort
durchvalue
in-des
cending Ordnung, dann RohrFormat-Table
mit-H
ideTableHeaders und-A
utoSize als Parametern weitergeleitet. Es ist sehr selten, um tatsächlich zu verwendenFT
hier PPCG verwendet wird, da die Ausgabe am Ende der Ausführung implizit erfolgt. Hier ist es jedoch sehr nützlich, sicherzustellen, dass nur die richtigen Teile ausgegeben werden.Beispiele
Das erste ist das "rote" Testbild von der Dominant Color-Herausforderung, das zweite ist das "Testbild" von dieser Herausforderung.
quelle
Tcl / Tk , 134 Bytes
d
ist fürdata
.Tcl / Tk , 232 Bytes
wish sort_pix.tcl QTE4O.png
wish sort_pix.tcl 5s1Ob.png
wish sort_pix.tcl z07VA.gif
quelle
Brain-Flak , 1110 Bytes
Probieren Sie es online!
Nun, das war ein Abenteuer. Es stellt sich heraus, dass Brain-Flak nicht sehr gut in der Bildverarbeitung ist. Wer wusste?
Ich beginne mit der Feststellung, dass dies technisch nicht dem geforderten strengen Ausgabeformat entspricht. Wenn Sie dies erzwingen möchten, lassen Sie es mich wissen und ich werde versuchen, Übersetzungscode hinzuzufügen. Für den Moment gibt es Dezimalzahlen aus: Jede 4 Zahlen repräsentiert eine Farbe in der Reihenfolge ROT GRÜN BLAU ZÄHLEN.
Als nächstes Eingabe. Die zulässigen Eingabeformate waren flexibler, daher verwendete ich das Format, das für Brain-Flak am einfachsten zu analysieren war (das ich finden konnte): Netpbm P6. Leider konnte Brain-Flak keine Dezimalzahlen aus dem P3-Format analysieren, da alle Netpbm-Bilder mit dem Zeichen beginnen
P
und Brain-Flak keine Dezimalzahlen aus Dateien verarbeiten kann, die nicht numerische Zeichen enthalten. Daher wurde stattdessen P6 verwendet, da P6 Farbinformationen als Bytes speichert, die im ASCII-Eingabemodus als Zahlen behandelt werden. Es blieb eine Herausforderung, da die Headerinformationen nicht sinnvoll codiert wurden, aber zum Glück brauchte ich keine dieser Informationen, sodass sie einfach verworfen werden. Dieses Programm entspricht nicht vollständig dem Netpbm-Standard, da es keine Zeilenumbrüche im Header zulässt, Zeilenumbrüche jedoch nichtvom Standard erforderlich, damit die Eingaben gültige Netpbm-Dateien sind.Letzte Einschränkung, die Version auf TIO ist tatsächlich nicht richtig für den "offiziellen" Betrieb konfiguriert, da ich (meines Wissens) keine Dateien als Eingabe auf TIO liefern kann und auch keine Bytes, die nicht druckbarem ASCII entsprechen, in der direkten Eingabe liefern kann. Für den offiziellen Betrieb wird das
-a
Flag benötigt, um Eingaben als Rohbytes und-f
Eingaben aus einer Datei zu übernehmen. Die Beispieleingabe über den TIO-Link wurde stattdessen manuell aus dem Beispiel auf der Netpbm-Wiki-Seite übersetzt .Darüber hinaus möchte ich dem Brain-Flak-Wiki dafür danken, dass es hilfreiche Codefragmente für die Arbeit zur Verfügung gestellt hat. Insbesondere die Bubble-Sort-Implementierung hier war maßgeblich für den letzten Schritt, nachdem ich für jede Farbe eine Zählung erhalten hatte, da ich eigentlich keine Ahnung hatte, wo ich anders anfangen sollte. Es waren umfangreiche Modifikationen erforderlich, aber ich bin froh, dass ich nicht bei Null anfangen musste.
Hier ist die ungolfed und kommentierte Version des Codes. Brain-Flak ist ein bisschen zu ausführlich, um eine sinnvoll formatierte Erklärung in diesen Beitrag aufzunehmen, aber die ungolfed-Version auf TIO enthält alles, was ich in einer enthalten würde, mit einer besseren Formatierung, als ich hier verwalten könnte. Wenn Sie also interessiert sind, nehmen Sie bitte eine aussehen.
Möglicherweise muss ich noch Golf spielen. Meine vorherige Brain-Flak-Antwort wurde mehrfach überarbeitet, aber hoffentlich gaben die dort gewonnenen Erkenntnisse diesem Punkt einen besseren Ausgangspunkt.
quelle
Python 2, 186 Bytes
Probieren Sie es online!
Haftungsausschluss: Die dargestellten Ausgaben sind aus Gründen der Lesbarkeit einzeilig. Die Code-Ausgabe erfolgt mit Abstand und Zeilentrennung, wie von der Abfrage gefordert.
Ausgang für 10red 20blue 30black 40white:
Ausgang für blauen Farbverlauf:
Ausgabe für Testbild
Erläuterung:
quelle
Java (1.4+) ,
483428 BytesProbieren Sie es online!(Funktioniert nicht online)Ungolfed:
Das
toString()
von map gibt so aus:Bitte posten Sie keine 1.8-spezifischen Golf-Vorschläge, es sei denn, es funktioniert in älterem Java, ich will nicht.
Beispiel: Lambdas funktionieren nicht in mehr Java-Versionen als in.
quelle
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 Bytes )x.toHexInteger
war schlauer als ein statischer Import.SmileBASIC, 165 Bytes
Das Bild wird als Array von 32-Bit-ARGB-Farbwerten angegeben (der Alpha-Wert wird abgeschnitten, wenn die Zahl in eine 6-stellige Hex-Zeichenfolge konvertiert wird).
quelle