Мне нужно получить наиболее распространенный цвет в файле изображения png с помощью C#. Таким образом, я могу нарисовать текст с похожими цветами, содержащимися в изображении.получить наиболее часто используемый цвет в PNG
ответ
Возможно, есть некоторые библиотеки, которые сделают это за вас, но если нет, я думаю, вы можете просто перебирать все пиксели, составлять карту всех цветов, которые вы найдете с количеством событий, и, в конце концов, получить один это наиболее используется.
Вы можете использовать colour histogram, сэмплируя значения RGB или HSV (в зависимости от вашего цветового пространства) в категории. Однако, если вы хотите, чтобы в основном был указан цвет, определенный фактическими значениями, вам нужно будет посчитать наличие каждого цвета отдельно.
Если вы смотрите на фактических значений пикселей, я бы использовать упорядоченный словарь:
SortedDictionary<Color,int>
и петли через все пиксели. Если вы не знаете, как пройти через пиксели, проверьте Bitmap.LockBits. Для ваших целей GetPixel
будет слишком медленным.
Edit:
Я не 100% уверен, сортировка. Я согласен с CodeInChaos - прямой словарь, вероятно, будет быстрее в любом случае. Вам нужно будет сделать один цикл через словарь, чтобы получить наиболее распространенное значение.
Почему SortedDictionary вместо словаря? Выполняет ли сортировка даже работу над структурой Color без ручной поставки Comparer? И Dictinary, вероятно, тоже быстрее, так как нужно искать хэш-таблицу вместо бинарного поиска. – CodesInChaos
Я изначально напечатал словарь, но потом подумал, что было бы здорово, если бы цвета автоматически сортировались. Теперь, когда вы упомянули об этом, сортировка может не сработать, но вы все равно получите подсчет каждого цвета. Хороший момент о скорости. Я отредактирую его. –
Подсчет каждого цвета может быть выполнен с помощью алгоритма гистограммы, но это, вероятно, не, что вы ищите. Цвета, которые очень похожи, должны учитываться вместе.
Я бы предложил использовать квантование цвета Octree, которое автоматически уменьшит количество цветов, поскольку оно учитывает, группируя подобные цвета в один ведро. Одно описание алгоритма: http://www.cubic.org/docs/octree.htm
Забыл упомянуть: этот совет предназначен только для 24-битного PNG. Для 8-битного PNG у вас уже есть палитра, которая выполняет группировку цветов. Необходимо только построить таблицу значений 256 и сохранить счетчик каждого индекса палитры, когда вы его встретите.
- 1. Как я могу эффективно определить наиболее часто используемый цвет?
- 2. Как определить наиболее часто используемый цвет среди 16 разных пикселей?
- 3. найти наиболее часто используемый символ в массиве?
- 4. Определить наиболее используемый одиночный цвет в изображении
- 5. C# linq, получить наиболее часто используемый элемент в коллекции
- 6. Python: Получить наиболее часто используемый элемент в списке
- 7. Наиболее часто используемый алгоритм STL, предикаты, итераторы
- 8. Найти наиболее часто используемый набор терминов
- 9. Наиболее часто используемый синтаксис для шаблонизатора?
- 10. Python Найдите наиболее часто используемый код
- 11. Linq, IQueryable получить наиболее часто используемый объект элемента
- 12. Постепенно найдите наиболее часто используемый элемент в списке в R
- 13. Как найти наиболее часто используемый элемент string в numpy ndarray?
- 14. выберите наиболее часто используемый элемент в dataframe, используя таблицу
- 15. Наиболее часто используемый тендер на магазин T-SQL
- 16. Какой лучший или наиболее часто используемый компилятор C++ под Windows?
- 17. Найти наиболее часто используемый элемент массива (не только строки)
- 18. Как найти режим (наиболее часто используемый элемент) массива?
- 19. Получить наиболее часто встречающуюся строку в массиве
- 20. показывают наиболее часто используемые цвета в изображении
- 21. Наиболее часто встречающиеся слова
- 22. Получить наиболее часто используемый массив байтов в массиве байтов в C#?
- 23. Как получить elasticsearch наиболее часто используемые слова?
- 24. Parse.com - как получить наиболее часто просматриваемый запрос?
- 25. Наиболее часто используемые pointcuts
- 26. наиболее часто встречающееся событие
- 27. Получить наиболее часто встречающееся значение из столбца MySQL в PHP
- 28. В поисках наиболее часто шаблон
- 29. Как получить наиболее часто появляющиеся пиксели в формате BMP
- 30. Какое наиболее часто используемое имя?
Если ваш PNG содержит только белые пиксели, вы хотите нарисовать текст в белом? Вы уверены, что это то, что вы хотите? –
@ Doc Brown Где он сказал, что он рисовал изображение? – Jess
Вы действительно хотите самый распространенный цвет, а не что-то вроде среднего цвета? Существует много разных цветов, и наиболее распространенный может заполнить небольшую часть изображения, так как, возможно, оптически общий цвет состоит из множества немного разных цветов. Возможно, вам нужно скрыть цвета до нескольких значений на цветной канал перед созданием гистограммы. – CodesInChaos