Как сделать изображение черно белым python

Обновлено: 06.07.2024

Pillow – то интересный проект, который позволяет легко и просто обрабатывать изображения с использованием средств Python. Основан на библиотеке изображений Python или PIL (сокращенно). Последний перестал обновляться еще в 2009 году, и поэтому команде разработчиков пришлось создать форк библиотеки, который используется в оригинальной Python 3.

Как открыть картинку с помощью Pillow?

Pillow позволяет без лишних усилий изменять изображения. Но для начала необходимо его открыть. Это делается с помощью методов open() и show() . Последний применяется в целях отладки.

Посмотрите на этот код.

В первой строчке импортируется модуль Image, а затем открывается изображение jelly.jpg с использованием метода open() . На Unix-системах этот метод создает временный файл, в котором и сохраняется изображение, а потом он открывается с помощью xv . Например, на Linux открытие картинки осуществляется с помощью ImageMagick . Если программа будет работать на Windows, она сначала сохранит картинку во временном файле формата BMP, а потом откроется изображение через приложение типа Paint.

Как получить данные о картинке с помощью Pillow

Pillow дает нам возможность получить детальные сведения о картинке. Давайте приведем пример.

Здесь видно, как происходит извлечение значений RGB из файла картинки. Кроме этого, демонстрируется способ создания ее гистограммы.

Учтите, что в данном примере вывод несколько уменьшен, на деле он был большим .

Чтобы построить гистограмму, используется другая библиотека – matplotlib .

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

Как обрезать картинки?

Pillow имеет весь необходимый инструментарий для обрезки изображений. Приведем фрагмент кода, демонстрирующего, как это работает.

Учтите, что здесь достаточно открыть картинку, а потом вызвать метод crop(). А в качестве его аргументов использовать координаты x1, y1, x2, y2 того, что требуется обрезать.

Верхняя левая точка – это пиксель 0. Соответственно, это первая точка. Вторая точка – это противоположный угол прямоугольника, по которому будет осуществляться обрезка.

Pillow обработка изображений в Python на примерах

О, так уже значительно лучше.

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

Как поворачивать картинку?

Для этого используется метод rotate() . Вот, как он работает.

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

Как показать картинку в Tkinter?

А с помощью такого кода реализуется задача отобразить изображение в графическом интерфейсе приложения.

Приложение показывает изображение в виджет label тулкит от Tkinter.

ImageTk – имеет полную совместимость с Tkinter. Следовательно, возможно его использование в любом месте, где Tkinter ждет получения объекта с картинкой.

А этот фрагмент кода показывает непосредственно создание изображения.

Картинка передается label .

Чтобы не допустить накопления мусора, необходимо сохранять все отсылки на картинки.

Параметры окна аналогичны параметрам картинки (речь идет конкретно о размерах).

Как подгрузить картинку из URL в Pillow

А теперь продемонстрируем фрагмент кода, в котором показывается, как получить картинку на основе ее URL-адреса.

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

Нами используется библиотека requests , чтобы загрузить картинку.

Картинка читается в виде сырых данных.

А здесь изображение создается из объекта response .

И в результате картинка сохраняется.

Как создается рисунок в Pillow?

Возможности библиотеки Pillow распространяются куда дальше, чем на обработку изображений. Так, с ее помощью возможно создание 2D-графики. Это реализуется с использованием модуля ImageDraw. Нами могут создаваться как новые картинки, так и редактироваться уже существующие. Также возможно создание графики для веб-сайтов.

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

Далее создается картинка с режимом RGB (с альфа каналом), размером 200х200, а фоном белым.

После этого мы генерируем объект ImageDraw, на котором попробуем что-то нарисовать.

С использованием метода rectangle () на площадки картинки, которая была нами сгенерирована таким способом, нами был отрисован голубой прямоугольник.

ImageFont – как писать текст на изображении?

А теперь приведем фрагмент кода, демонстрирующего написание текста на картинке.

Что такое фильтры и как их использовать?

Под фильтром подразумевается специальная модель для обработки картинки, которая применяется в целом ко всему изображению. Давайте рассмотрим несколько примеров, как возможно использование этого метода.

Pillow обработка изображений в Python на примерах

Данная программа будет брать картинку, а потом размывать ее с помощью фильтра ImageFilter.BLUR . А потом метод save() позволяет нам сохранить итоговый результат. В результате, у нас получается такая фотография.

Pillow обработка изображений в Python на примерах

Тем не менее, как правило, у нас нет необходимости размывать картинку. Наоборот, необходимо увеличить резкость. Для этого используется фильтр ImageFilter.SHARPEN .

Есть еще один способ увеличения резкости картинок в Python. Это модуль ImageEnhance .

Также есть другие фильтры – DETAIL, EDGE_ENHANCE, EMBOSS, SMOOTH и другие. Настоятельно рекомендуется попробовать разные варианты и посмотреть, что будет получаться.

Для работы с графическими изображениями в Python есть ряд библиотек, в частности, библиотека Pyllow. Если у вас уже установлен pip то поставить Pillow не составит труда, просто используем команду python -m pip install pillow, которая автоматически скачает и установит библиотеку. Для использования библиотек просто подключаем ее через импорт:

Самым важным классом в этой библиотеке — Image. Вот простейший пример использования, грузим картинку и отображаем ее на экране:

Отобразит Python картинку, правда, стандартными средствами операционной системы, просто показав окно с картинкой.

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



Объединим их, используя интерполяцию между новым и старым:

Получив вот такой вот результат:


Третий параметр — это альфа. Попробуем поиграться с ним, задами, например 5:



Возможно, на данном примере не совсем понятно. Хорошо, попробуем изображения попроще. Вот у нас две картинки:



Наложим их друг на друга методом blend с альфой 2:



Библиотека позволяет также формировать изображения и сохранять их в файл:

Вот что сделает данный код:


Только на этот раз изображение будет не на экран выведено, а в файл по указанному пути.

Выведем формат, тип, размер изображения:

Любопытно, что можно конвертировать изображение из одного формата в другой, для этого достаточно открыть его и сохранить в нужном формате. Формат определяет расширение:

Возможны и геометрические преобразования изображений, например, поворот на угол:

Monro

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

Зачем нужно черно-белое изображение?

В начале любого распознавания необходимо провести предварительную обработку. И конечным пунктом обработки зачастую является получение черно-белого изображения.

А фото, как черно-белое изображение, подойдет?

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


Картинки кликабельны.

А в чем проблема?

Проблема как обычно — в скорости. Допустим, надо обрабатывать видеопоток в реальном времени. Можно потратить уйму времени на поиск готового решения или библиотеки. Хотя, все как обычно, есть под рукой. Надо просто суметь все это вкусно приготовить. Вот в этом и проблема.

Общий подход к подготовке изображения

Вначале надо перевести изображение в оттенки серого. Нам не нужны значения по всем каналам, хочется работать с одним параметром — и это будет яркость. Как сделать изображение в оттенках серого, описано тут. Отбросим пугающее слово Direct2D, нам просто нужны коэффициенты.

Далее, возможно, надо сделать легкое размытие, чтобы мостики, связывающие разные кляксы, стали тоньше и более слились с фоном. Возможно надо что-то сделать с общей яркостью, применить фильтр резкости и т.д. Не суть. В каждом случае — это набор кадров, имеющих некое одно общее свойство. Освещенность, размытость, перекос. Набор мероприятий с изображением зависит от каждого конкретного случая применения.

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

На этом шаге должны исчезнуть все незначительные мостики между интересующими объектами. Если этого не произошло — вернуться назад и еще поработать с изображением.

Bitmap

В Delphi есть такой класс — TBitmap. Который позволяет работать с битовой матрицей любого формата быстро и правильно. Просто надо ухватить начало массива данных и работать с ним как с указателем. Давайте для начала приведем любое изображение к оттенкам серого.

Получить изображение в оттенках серого

Оттенки серого получаются, когда значения всех каналов равны. Если цвет — это комбинация красного(R), зеленого(G) и синего(B), то при значении всех каналов R=128, G=128, B=128, получим вот такой серый цвет , при значений всех каналов 191 — такой

Рассмотрим два пути. В первом, значения всех каналов суммируются и результат делится на 3. Во-втором, значение каждого канала необходимо умножить на некий свой коэффициент и сложить..

Таких коэффициентов на самом деле масса разновидностей. Рассмотрим два варианта.

создать изображение python

Библиотека PIL позволяет работать не только с готовыми изображениями, но и создавать изображения. Создать новое изображение позволяет функция new(), функция имеет следующий формат:

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

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

Читайте также: