Как получить доминирующий цвет на изображении с помощью go и imagemagick - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу извлечь доминирующие цвета из png, jpeg, svg и т. Д. Я пробовал этот код, но иногда сгенерированная палитра неверна.

// GET image colors
    mw.QuantizeImage(5, mw.GetImageColorspace(), 0, imagick.DITHER_METHOD_NO, false)
    _, allColors := mw.GetImageHistogram()

    for i, c := range allColors {
        if i > 4 {
            break
        }
        h, s, l := c.GetHSL()

        // "github.com/lucasb-eyer/go-colorful"
        cf := colorful.Hsl(h*360, s, l)

        result = append(result, cf.Hex())
    }

Какой метод является лучшим для извлечения доминирующих цветов

1 Ответ

1 голос
/ 06 ноября 2019

Вы хотите перебрать все цветовые элементы и вызвать (*PixelWand)GetColorCount, чтобы определить частоту.

mw.QuantizeImage(5, mw.GetImageColorspace(), 0, imagick.DITHER_METHOD_NO, false)
_, allColors := mw.GetImageHistogram()
var (
    mostUsedColor *PixelWand
    mostUsedCount uint
)
for _, c := range allColors {
    count := c.GetColorCount()
    if count > mostUsedCount {
        mostUsedColor = c
        mostUsedCount = count
    }
}
...