Меню

Python что за цвет



Получение и изменение цвета пикселя в изображении. Библиотека PIL Python

В прошлой статье мы узнали как установить библиотеку PIL в Python и начать уже с ней работать. В этой статье мы продолжаем изучение библиотеки PIL. Начиная с версией 1.1.6 метод load() возвращает объект, с помощью которого можно получить доступ к отдельным пикселям изображения. Указав два значения внутри квадратных скобок, можно получить или задать цвет пикселя.

Для доступа к отдельному пикселю вместо метода load() можно использовать методы getpixel() и putpixel(). Метод getpixel( ) позволяет получить цвет указанного пикселя, а метод putpixel( , ) изменяет цвет пикселя. Координаты пикселя указываются в виде кортежа из двух элементов. Необходимо заметить, что эти методы работают медленнее метода load(). Пример использования метода getpixel() и putpixel() приведен ниже.

Использование метода getpixel() и putpixel()

В этом примере для просмотра изображения мы воспользовались методом show(). Метод show() создает временный файл в формате BMP и запускает программу для просмотра изображения, используемую в операционной системе по умолчанию. Например, на моем компьютере запускается программа ACDSee. Для сохранения изображения в файл предназначен метод save().

В первом параметре указывается абсолютный или относительный путь. Вместо пути можно передать файловый объект, открытый в бинарном режиме. Сохраним изображение в форматах JPEG и BMP разными способами.

Сохраняем изображение в Python

Обратите внимание на то, что мы открыли файл в формате JPEG, а сохранили его в формате BMP. Таким образом, можно открывать изображения в одном формате и конвертировать его в другой формат. Если сохранить изображение не удалось, возбуждается исключение IOError. Если параметр не указан, то формат изображения определяется по расширению файла.

В параметре можно указать дополнительный характеристики изображения. Поддерживаемый опции зависят от формата изображения. Например, по умолчанию изображения в формате JPEG сохраняются с качеством 75. С помощью опции quality можно указать другое значение в диапазоне от 1 до 100.

За дополнительной информации по опциям обращайтесь к документации. Так же для более подробной инструкции игры в покер можете прочитать poker правила и повысить свои навыки в этой игре. Удивите своих знакомых во время игры в покер, продемонстрировав им свой профессионализм игры.

Источник

Цветной вывод текста в Python

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

Сделать текст цветным можно двумя способами: использовать встроенные средства языка или библиотеки. Каждый способ имеет плюсы и минусы, также существуют нюансы, касающиеся изменения цвета текста в консоли Windows.

C помощью встроенных средств языка

В Python можно форматировать текст с помощью ANSI кодов. Это очень мощный и удобный инструмент, с его помощью программист может напрямую определять цвет текста.

ANSI коды работают на большинстве дистрибутивов Linux, но не поддерживаются консолью операционной системы Windows до Windows 10. В статье есть отдельный пункт про то, как запускать на Windows!

Изменять цвет текста с помощью ANSI кодов можно разными способами, например, использоваться функции или даже написать свой класс-обёртку для ANSI.

Использовать ANSI коды просто, для этого нужно знать базовый синтаксис и сами коды. Разбор на примере кода «\033[31m\033[43m»:

  • /033 — обозначение того, что дальше идет какой-то управляющий цветом код;
  • [31m — цвет текста (красный);
  • [43m — цвет фона (жёлтый).

После вывода этого в консоль, далее выводимая информация будет красного цвета на жёлтом фоне. Сбросить к начальным значениям : \033[0m .

Базовые коды:

  • \033[0-7m — это различные эффекты, такие как подчеркивание, мигание, жирность и так далее;
  • \033[30-37m — коды, определяющие цвет текста (черный, красный, зелёный, жёлтый, синий, фиолетовый, сине-голубой, серый);
  • \033[40-47m — коды, определяющие цвет фона.

Цвета

Цвет Текст Фон
Чёрный 30 40
Красный 31 41
Зелёный 32 42
Жёлтый 33 43
Синий 34 44
Фиолетовый 35 45
Бирюзовый 36 46
Белый 37 47

Эффекты

Код Значение
Сброс к начальным значениям
1 Жирный
2 Блёклый
3 Курсив
4 Подчёркнутый
5 Редкое мигание
6 Частое мигание
7 Смена цвета фона с цветом текста

Функции для вызова

Быстро покрасить строку в нужный цвет можно с помощью функций. Им нужно дать говорящие имена, передать в качестве аргумента строку и использовать в их теле правильный ANSI код.

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

Мы меняли только цвет текста, но можно менять и цвет фона, добавлять дополнительные стили. Например, чтобы вывести подчёркнутый текст белого цвета на синем фоне, нужно написать так:

Вот так будет выглядеть вывод:

Обратите внимание на строку print(«\033[4m\033[37m\033[44m<>\033[0m».format(«Python 3»)) .

Здесь мы вывод осуществляли следующим образом:

  • \033[4m – подчёркнутый;
  • \033[37m – белая надпись;
  • \033[44m – синий фон;
  • <> – заменится на «Python 3»;
  • \033[0m – сброс к начальным значениям.

Как вывести цветной текст в консоль на Windows

В Linux по умолчанию встроена поддержка ANSI кодов консолью, а в Windows — нет. Это объясняется тем, что для линукса консоль является основным рабочим инструментом. В Windows консоль используется редко, поэтому нет смысла встраивать в неё подобные вещи.

Однако в Windows 10, начиная с версии Threshold 2, разработчики добавили в консоль поддержку управляющих кодов. Однако из-за того, что далеко не все пользуются новой ОС, писать консольные приложения с цветным текстом все ещё приходится с помощью дополнительных библиотек.

Для того, чтобы код, написанный с помощью внутренних средств Python 3 или с помощью библиотеки termcolor заработал в Windows 10, надо включить поддержку ANSI для stdout в запущенной консоле.

Сделать это можно следующим образом:

Вывод цветного текста в консоль с colorama

Colorama – самая популярная библиотека для вывода цветного текста на Python 3. Colorama позволяет использовать ANSI коды не только в Linux, но и в Windows.

Использование функций и методов библиотеки упрощает написание кода и делает более простым для поддержки. Больше не нужно запоминать или копировать ANSI коды. Команды настолько просты и интуитивно понятны, что с задачей справиться даже обычный пользователь.

Использование сторонней библиотеки, такой как colorama, не приводит к каким-то негативным эффектам. Перед использованием библиотеки colorama, её следует установить с помощью команды в консоле pip install colorama .

Приведём пример использования colorama:

Здесь мы импортировали модули для работы с текстом и фоном. И так же как и раньше мы выводили всё встроенными средствами Python, вывели всё в консоль.

Стоит обратить внимание на функцию init. Если её забыть запустить, то не будет поддерживаться вывод на Windows 10.

Только теперь нам не надо писать \033[44m, а достаточно написать Fore.BLUE, что конечно же удобно. Style.RESET_ALL – это сброс цветов консоли к начальным значениям.

Цветной текст с помощью termcolor

Эта библиотека даёт программисту исчерпывающий инструментарий для работы с цветом текста.

Часто termcolor используют вместе с colorama. Termcolor используют непосредственно для написания кода, действительно, её синтаксис более удобный и простой.

Для установки библиотеки termcolor следует выполнить в консоле команду pip install termcolor .

Здесь мы воспользовались функциями colored и cprint. Первая позволяет создать строку для последующего вывода с необходимыми параметрами цветов и эффектов. Вторая сразу производит вывод в консоль.

Заключение

Если мы делаем пару функций для вывода в консоль цветных сообщений об ошибках и предупреждениях, то можно их сделать и не подключая библиотек. Правда при подключении библиотеки код более читаемым становится.

При выборе между библиотеками colorama и termcolor, я бы остановился бы на colorama. Не только исходя из её большей популярности, но и из-за того, что она поддерживает работу с командной строкой Windows 10. Хотя cprint удобная функция в termcolor.

Источник

определение наиболее используемого цвета в изображении с помощью python

Я хочу найти наиболее используемый цвет в изображении с помощью python. например, определите цвет объекта на следующем изображении

Как определить базовый цвет из кодов RGB (пример — красный на приведенном выше изображении).

6 ответов

поскольку вам, скорее всего, не понадобится гистограмма всех миллионов цветов, которые возможны с использованием 24-битного цветового пространства, я предлагаю вместо этого преобразовать изображение в пространство HSV. Затем вы можете разделить часть оттенка этого пространства на несколько ячеек, которые описывают оттенки, которые вы хотите найти («темно-красный», «оранжевый красный» или что-то еще). Затем сделайте гистограмму этих бункеров и найдите, какой из них является доминирующим оттенком, который является «цветом».

статьи в Википедии http://en.wikipedia.org/wiki/HSL_and_HSV должен заставить вас начать. Если вы используете библиотеку обработки изображений, скорее всего, существует функция rgb-to-hsv/hsl.

кроме того, если изображения большие и скорость является проблемой, вы можете рассмотреть возможность уменьшения размера изображения до меньшего размера перед гистограммой.

подход грубой силы-это цикл по всем пикселям изображения и подсчет значений R, G, B. Более изысканный подход-использовать Библиотека Изображений Python функция гистограммы и вычислить среднее значение всех цветов.

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

в вашем случае я бы сделал словарь, чтобы каждый rgb тройной против счетчика, поэтому я бы переработал программу так (не тестировал)

теперь вы можете проверить один с самым высоким количеством и получить наиболее используемый RGB тройной. Конечно, если вы хотите проверить также vicinal цвета, вам придется конвертировать в HSV и проверить расстояния между различными точками HSV, а затем решить, какое расстояние слишком много. Точки, достаточно близкие в пространстве ВПГ (и, в частности, компонент оттенка), скорее всего, одного цвета и, следовательно, могут быть суммированы вместе.

Если вы действительно уверены, что у вас всегда будет только один доминирующий цвет (нет мешков в двух цветах, например), то грубая гистограмма по размерам H&S HSV должно хватить.

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

основная идея алгоритм таков: каждый пиксель смотрит на соседние пиксели одинакового цвета и меняет свой цвет на средневзвешенное значение всех своих цветов; промыть и повторить. Довольно скоро у вас есть все цвета на изображении, сгруппированные очень плотно вокруг нескольких преобладающих цветов.

сортировка пикселей на месте, затем цикл через изображение и найти самый длинный пробег.

как было предложено, будет удобнее преобразовать изображение из RGB в HSV. Стандартный библиотечный модуль colorsys содержит функцию rgb_to_hsv на этот счет. Затем вы можете отобразить цвета на изображении, скажем, с H как x и S как y. Выберите точки в этом пространстве и дайте им имена; чем больше точек, тем лучше. Затем для каждого пикселя изображения найдите ближайшую из выбранных точек и используйте ее имя в качестве значения пикселя. Подсчитайте, какое имя встречается чаще всего раз.

Источник

Пишем простейшие фильтры изображений на Python

Дело было вечером, делать было нечего. Стало мне вдруг интересно, как реализованы простейшие фильтры изображений: оттенки серого, яркость, контрастность, сепия и т.п. Вооружившись Гуглом и Питоном решил потратить вечер с пользой и хоть немного разобраться в теме.

Эта статья не претендует на исчерпывающее руководство или хоть какую-нибудь интеллектуальную ценность. Какие-то алгоритмы я взял с Хабра, какие-то с Википедии, какие-то пришлось переписывать на Питон с других языков. Все они доступны в сети и ничего особо нового здесь вы не найдете.

Исходный код и изображения из статьи вы можете найти здесь.

Вот над таким изображением мы будем издеваться в статье:

Для работы с изображением мы будем использовать Питоновскую библиотеку PIL. Из нее нам понадобится только один класс:

Изменения яркости

Начнем с самого простого — изменения яркости. Если мы хотим увеличить яркость изображения, то значение каждого цветового канала мы увеличиваем на определенный коэффициент. Если хотим затемнить — уменьшаем. Для каждого канала используется одинаковый коэффициент. Если итоговое значение канала больше 255 или меньше 0, то исправляем их.

Если brightness больше 1 , то изображение осветляется. Если brightness меньше 1 , то изображение затемняется. Вот как будет выглядеть исходное изображение при brightness = 0.5 и brightness = 1.5 соответственно:

Негатив

Еще один элементарный фильтр — это негатив. Для этого нам нужно инвертировать значение каждого канала. Просто вычитаем значение канала из 255 . Здесь результирующее значение не может выйти за допустимые границы, поэтому проверка не нужна.

Вот результат обработки исходного изображения этим фильтром:

Черно-белое изображение

Изображение рисуется только двумя цветами: черным и белым. Поэтому нам надо разделить все пиксели на две группы: темные и светлые. Для этого мы суммируем значения всех каналов и сравниваем его с пороговым значением. Если сумма больше этого значения, то пиксель будет рисоваться черным цветом, иначе — белым. Существует несколько способов расчета порогового значения. Мне понравился этот: separator = 255 / brightness / 2 * 3 . Где brightness — значение, указанное пользователем. Чем оно больше, тем больше пикселей будет окрашено в белый.

Исходное изображение при brightness = 0.8 и brightness = 1.2 соответственно:

Оттенки серого

Если говорить грубо, то для наложения этого фильтра надо закрасить пиксель усредненным значением всех его каналов gray = (red + green + blue) /3 . Эта формула будет работать, но даст не самый лучший результат. Дело в том, что человеческий глаз по разному воспринимает яркость для разных цветов. Из-за этого, например, красный цвет будет оказывать большее влияние на результат.Нужно учитывать это если мы хотим добиться более приятного глазу результата.

Для решения этой проблемы мы будем умножать значение каждого канала на определенный коэффициент. Для каждого канала свой. Есть несколько разных вариантов этих значений. На мой взгляд такая формула наиболее удачна: gray = int(r * 0.2126 + g * 0.7152 + b * 0.0722) .

И результат применения этого фильтра:

Сепия

Для того чтобы представить исходное изображение в сепии, надо усреднить значение всех каналов, а так же «сдвинуть» цвет каждого канала в сторону цвета Сепия ( #704214 ). Так же, как и в оттенках серого, здесь тоже существуют разные наборы коэффициентов сдвигов. Я не заметил между ними особой разницы.

Исходное изображение в сепии:

Контрастность

Последний из рассмотренных фильтров — изменение контрастности изображения. Его алгоритм сложнее и состоит из нескольких этапов.

Сначала мы считаем усредненное значение яркости для всего изображения.

После этого для каждого канала каждого пикселя мы находим отклонение от усредненного значения, найденного на предыдущем шаге, и увеличиваем/уменьшаем его на заданный пользователем коэффициент. Этот шаг можно оптимизировать. Т.к. значение каналов лежит в пределах 0 — 255 , то мы можем рассчитать новые значения для этого диапазона. А затем просто брать для каждого канала заранее рассчитанное значение.

В итоге наш фильтр выглядит так:

И контрастное изображение с coefficient = 2 вот так:

Заключение

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

Вы можете прочитать эту статью на английском здесь.

Коментарии

Thank you for comment!
Ваше сообщение будет доступно после проверки.

Супер! Спасибо за статью, очень классная!

В чём заключается смещение канала в сторону какого-то цвета? (Цитата: «сдвинуть цвет каждого канала в сторону цвета Сепия») Есть ли общая формула для смещения к определённому цвету? Статья очень пригодилась!)

Спасибо за обзор! Действительно всё просто, если не углубляться в подбор коэффициентов )

Источник

Читайте также:  Платье цвета белого золота