Für eine JPG-Bilddatei erhalten Sie 3-4 durchschnittliche Hauptfarben

8

Ich möchte die 3-4 Hauptfarben einer JPG-Bilddatei erkennen können.

Beispielbilder und Beispielcode unten:

- rot, schwarz, weiß

- weiß, grün, pink

- blau, gelb, schwarz

Ich habe einige code , um das Folgende zu erhalten, hat aber immer noch Probleme beim Gruppieren von Farben.

%Vor%
  • Ausgabe für Beispiel1.jpg ist (# FF6E8C, # FF6482, # FA6E8C) - 3 Schattierungen von rot / pink - sollte rot, schwarz und weiß sein
  • Ausgabe für Beispiel2.jpg ist (# F0C8C8, # C8DC6E, # E6C8C8) - 2 Schattierungen von Pink und Grün - sollte hellrosa, grün, weiß
  • sein
  • Ausgabe für Beispiel3.jpg ist (# FFDC50, # 640A28, # 8C1E3C) - 3 Schattierungen von Blau - sollte blau, gelb, schwarz
  • sein

Idealerweise müssen Hintergrundfarbe (#FFFFFF) und schwarzer Umriss / Schattierung ignoriert werden.

Kann html-Farben online hier kopieren

    
Dere_2929 06.11.2013, 09:50
quelle

4 Antworten

1

Vielen Dank für Ihre Hinweise und diesen Artikel .

Hier ist die Lösung:

  • GetWebColors () - Füllt die Liste aller benannten Webfarben auf ( Ссылка )

  • GetNamedWebColor_NearestMatch (Farbe) - Für jede gegebene Farbe (es gibt 16.777.216!) gibt die nächste 'Benannte' Webfarbe zurück (1 von 140)

  • GetMainXColors () - Gibt zuerst X viele Farben zurück, die sich durch die Anzahl der übergebenen HSL-Eigenschaften unterscheiden (dies verhindert, dass 3 Farbtöne derselben Farbe zurückgegeben werden)

Tuning: unten stehende Codewerte für diesen (dh für den Farbton, wollen wir 10 Grad min ändern zwischen Farben.)

%Vor%

Gibt jetzt aus

  • Ausgabe für Beispiel1.jpg ist: Gainsboro, Crimson, DarkSlateGray: jetzt in der Nähe von weiß, rot, schwarz

  • Ausgabe für example2.jpg ist: Gainsboro, DarkKhaki, Pink: jetzt in der Nähe von weiß, grün, pink

  • Ausgabe für example3.jpg ist: Schwarz, DarkSlateBlue, Gold: korrekt

Code:

%Vor%     
Dere_2929 08.11.2013, 14:30
quelle
1

Ich habe so eine Color Analyzer App gemacht, wo Sie sehen können Wie funktioniert funktioniert ? Sie sind auf dem richtigen Weg. Vergrößern Sie das Bild bei Bedarf auf eine Größe von 128 x 128, um die Leistung zu erhalten.

Dann müssen Sie den RGB-Wert in Farbwinkel mit C # konvertieren.

Nun müssen Sie eine beliebige Sortierung der Farbzählung. Ich empfehle, die Farbwinkel von 360 ° = 360 Stück zum Beispiel nur auf 36 Stück zu reduzieren. Jetzt können Sie einfach die erste Farbe in der sortierten Liste mit den meisten Farben aufnehmen.

    
Nasenbaer 08.11.2013 11:04
quelle
0

Ich denke, Sie sollten einige Bildverarbeitungsbibliotheken wie Imagemagick oder Opencv verwenden. Es gibt Methoden zum Extrahieren von Pixelfarben in diesen Bibliotheken. Sie müssen diese Bibliotheken nur mit Ihrem Projekt verknüpfen. ich habe imagemagick verwendet, um große farben aus bildern zu extrahieren, aber das war eine cpp-anwendung.ich denke .net interfece gibt es auch für imagemagick

Danke

    
Jithin K George 08.11.2013 06:21
quelle
0

Ich denke, wenn Sie einige Bibliotheken nicht verwenden möchten, sollten Sie HSL anstelle von RGB für Berechnungen Ссылка verwenden

    
user2471050 08.11.2013 10:53
quelle