получить наиболее используемый цвет в PNG - PullRequest
4 голосов
/ 05 января 2011

Мне нужно получить самый распространенный цвет в файле изображения png с помощью c #.Это так, чтобы я мог нарисовать текст с похожими цветами, содержащимися на изображении.

Ответы [ 4 ]

4 голосов
/ 05 января 2011

Вы можете использовать цветную гистограмму , выбирая значения RGB или HSV (в зависимости от вашего цветового пространства) по категориям. Однако, если вы хотите, чтобы в основном цвет определялся по фактическим значениям, вам придется подсчитывать вхождение каждого цвета отдельно.

0 голосов
/ 05 января 2011

Подсчет каждого цвета можно выполнить с помощью алгоритма гистограммы, но это, вероятно, , а не , что вы ищете.Очень похожие цвета должны учитываться вместе.

Я бы предложил использовать квантование цветов Octree, которое автоматически уменьшит количество цветов при подсчете, тем самым сгруппировав похожие цвета в одно ведро.Одно описание алгоритма: http://www.cubic.org/docs/octree.htm

Забыл упомянуть: этот совет только для 24-битного PNG.Для 8-битного PNG у вас уже есть палитра, которая выполняет группировку цветов.Необходимо только построить таблицу значений 256 и вести подсчет каждого индекса палитры, как только вы его встретите.

0 голосов
/ 05 января 2011

Если вы смотрите на фактические значения пикселей, я бы использовал отсортированный словарь:

SortedDictionary<Color,int>

и прошел бы по всем пикселям.Если вы не знаете, как прокрутить пиксели, посмотрите Bitmap.LockBits .Для ваших целей GetPixel будет слишком медленным.

Редактировать:

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

0 голосов
/ 05 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...