Получение цветовой схемы из изображения

Я хочу разработать основной инструмент как тот, показанный здесь. Я буду делать снимки экрана многих веб-страниц, и оттуда я хочу взять лучшие пять самых популярных цветов и оттуда так или иначе решить, являются ли цвета хорошим соответствием.

Я хочу записать этот инструмент в C# и после небольшого количества исследования, я обнаружил lockbits. Моя первая идея состояла в том, чтобы взять изображение и затем получить цвет каждого пикселя, но я не уверен относительно того, даст ли это мне результаты, которых я требую и как составить шесть списков самых популярных цветов.

Кто-либо может здесь предоставить консультацию относительно того, как я создал бы программу, чтобы сделать что-то подобное программе выше, которая возьмет в изображении и выберет лучшие пять цветов, используемых в изображении?

9
задан Mike B 11 January 2010 в 15:34
поделиться

3 ответа

Хорошо .. Используйте HINGNAIL Image (16x16, 32x32 и т. Д.) И выберите из него, как цвета

обновлен код:

    private void button1_Click(object sender, EventArgs e)
    {
        int thumbSize = 32;
        Dictionary<Color, int> colors = new Dictionary<Color, int>();

        Bitmap thumbBmp = 
            new Bitmap(pictureBox1.BackgroundImage.GetThumbnailImage(
                thumbSize, thumbSize, ThumbnailCallback, IntPtr.Zero));

        //just for test
        pictureBox2.Image = thumbBmp;            

        for (int i = 0; i < thumbSize; i++)
        {
            for (int j = 0; j < thumbSize; j++)
            {
                Color col = thumbBmp.GetPixel(i, j);
                if (colors.ContainsKey(col))
                    colors[col]++;
                else
                    colors.Add(col, 1);
            }                
        }

        List<KeyValuePair<Color, int>> keyValueList = 
            new List<KeyValuePair<Color, int>>(colors);

        keyValueList.Sort(
            delegate(KeyValuePair<Color, int> firstPair,
            KeyValuePair<Color, int> nextPair)
            {
                return nextPair.Value.CompareTo(firstPair.Value);
            });

        string top10Colors = "";
        for (int i = 0; i < 10; i++)
        {
            top10Colors += string.Format("\n {0}. {1} > {2}",
                i, keyValueList[i].Key.ToString(), keyValueList[i].Value);
            flowLayoutPanel1.Controls[i].BackColor = keyValueList[i].Key;
        }
        MessageBox.Show("Top 10 Colors: " + top10Colors);
    }

    public bool ThumbnailCallback() { return false; }

ALT TEXT http://lh3.ggpht.com/ _1TPOP7DZY1E / S0UZ6GGD4OI / AAAAAAAC5K / 3PSP1COCCELELY / S800 / COLORS.PNG

16
ответ дан 4 December 2019 в 10:32
поделиться

Скорее всего, это фиктивные функции, которые кто-то ввел ради краткости. h (), например, выглядит как псевдоним для htmlspecialchars ():

function h($s)
{
    return htmlspecialchars($s);
}

Поэтому найдите их в файлах включения. Espept. имена с такими именами, как «util.php» или «lib.php».

-121--1296723-

В PHP нет функций, называемых h () и e (). Они должны быть объявлены в проекте, с которым вы работаете. искать их и выяснять, что они делают.

-121--1296726-

Самый простой способ, как вы сказали:

  • Читать в каждом пикселе и хранить их в коллекция.

  • Пять лучших используемых цветов будут значения, которые встречаются больше всего.

Вот как я бы сначала попробовал что-то подобное.

Для дальнейшей работы можно использовать цветовые диапазоны, поэтому с помощью значений RGB ( красный, зеленый, синий ) назначить цвет определенной аппроксимации цвета.

Например, скажем, что использовалось одно и то же изображение, значения светло-синего цвета сохранялись бы вместе, тогда можно было бы взять среднее из них, чтобы получить наиболее распространенный (но средний) светло-синий цвет в сцене.

Повторите для других пикселей.

Что касается масштабирования - на примере веб-сайта используются тусклые/яркие значения. Можно использовать простое значение масштаба. Рассмотрим средний красный в RGB:

0.7, 0.0, 0.0

Вы можете масштабировать это, добавляя/умножая значение. Однако следует сохранять значения в пределах от 0 до 1. Что касается значения масштабирования, экспериментатор. Чем она выше, тем тусклее/ярче станет цвет.

2
ответ дан 4 December 2019 в 10:32
поделиться

Этот является примером того, как создать гистограмму (или таблицу частоты в других словах), где вы можете взглянуть на детали о том, как перейти на обработку изображения.

Но моя главная рекомендация не должна использовать RGB (если сайт не смотрите в основном в основном цветах), но вместо этого используйте HSB. Компонент «H» (Hue) даст вам лучшую индикацию используемых цветов независимо от того, насколько они яркие или темные они.

2
ответ дан 4 December 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: