Wie bekomme ich eine Mehrheitsfarbe in einem Bild?

8

Ich möchte die Mehrheitsfarbe in einem Hintergrundbild in .NET abrufen. Ist es möglich?

    
John 30.03.2010, 14:04
quelle

5 Antworten

6

Sie können alle Pixel im Bild durchlaufen und mithilfe der getPixel-Methode den RGB-Wert bestimmen. Sie können dann ein Wörterbuch haben, das den ARGB-Wert zusammen mit einer Zählung speichert. Sie können dann sehen, welcher ARGB-Wert am meisten im Bild vorhanden ist.

%Vor%

Wie bereits erwähnt, hat dies keine Sympathie für ähnliche Farben. Wenn Sie eine mehr generelle Farbe wünschen, können Sie einen Schwellenwert für Ähnlichkeit haben. z.B. anstatt:

%Vor%

Sie könnten tun:

%Vor%

Sie könnten die Schwelle von 10 bis zu dem, was Sie brauchen, aufstellen.

    
CeejeeB 30.03.2010 14:11
quelle
5

Diese Algorithm Challenge auf Stack Overflow ist möglicherweise auch nützlich:

Algorithmus-Herausforderung: Erzeuge ein Farbschema aus einem Bild

Ziehen Sie auch in Erwägung, ein Histogramm des Bildes zu erstellen - und die höchstwertige Farbe als "Hauptfarbe" zu verwenden: Ссылка

    
Seidr 30.03.2010 14:27
quelle
5

Dies wird die durchschnittliche Farbe für das Bild zurückgeben.

%Vor%     
Matthew Whited 30.03.2010 14:42
quelle
4

Dadurch wird die Durchschnittsfarbe für das Bild mit Hilfe des unsicheren Zeigerzugriffs zurückgegeben. Hinweis: Code ist nur für 24bppRgb angepasst, könnte für andere Pixelformate angepasst werden.

%Vor%

gist: Ссылка

    
Joseph Kingry 30.03.2010 15:34
quelle
3

Angenommen, Sie charakterisieren die Farben jedes Pixels mit RGB (im Gegensatz zu CMYK ), Sie könnten ein 3D-Array erstellen (jeweils eine Dimension für R, G und B). Entscheiden Sie sich dann für die Anzahl der Fächer, die Sie in jeder Dimension haben möchten - je mehr Fächer, desto größer ist die Differenzierung zwischen ähnlichen Farbtönen.

Sobald dies erledigt ist, durchlaufen Sie einfach eine Bitmap-Darstellung Ihres Bildes und summieren die # Pixel, die in jede der Zellen in Ihrem 3D-Array fallen. Die Zelle mit der höchsten Summe wird die vorherrschende Farbe sein.

Wahrscheinlich möchten Sie Ihren Algorithmus für die # Bins in jeder Dimension leicht konfigurierbar machen, so dass Sie einstellen können, wie stark er zwischen ähnlichen Farben unterscheidet.

%Vor%     
Emmanuel 30.03.2010 14:32
quelle

Tags und Links