Как сделать негатив pillow

Обновлено: 06.07.2024

У меня просто не месяц, а праздник какой-то: 1. Стал мастером, набрав 10000 минут просмотра; 2. Набрал 1000 подписчиков; 3. Сегодня 200 -й материал на моем канале ; 4. И, наконец, самое важное и самое главное: Яндекс начислил мне 22 рубля, заплатив, разумеется, за меня налоги. И все это благодаря самоизоляции. Ура!

Сегодня в праздничный день на моем канале я рассматриваю очень интересный вопрос - библиотеку pillow для Python . Эта библиотека позволяет довольно легко программно работать с графическими файлами. Всем, кто интересуется программированием графики с ней нужно обязательно познакомиться. Я, к сожалению, не являюсь специалистом по обработке графики (а очень бы хотелось), поэтому примеры мои будут простыми и не замысловатыми.

Библиотека pillow. Обрезывание картинки

Библиотека pillow обычно устанавливается с помощью утилиты pip3 ( pip ) и на этом вопросе я останавливаться не буду. Чем она хороша? Да тем, что легко и просто позволяется обрабатывать графические изображения. Вы при этом не заботитесь о том, как реально устроены эти изображения, работая только с двумерным массивом пикселей.

Начнем с простой программы pil1000.py , которая открывает картинку и затем обрезывает ее по координатам, которые мы указываем. На рисунке 1 представлена картина (Джоконда), а на рисунке 2 результат работы программы.

Oct 20, 2016 16:07 · 1076 words · 6 minute read python tutorial

Рано или поздно, но всем нам приходится работать с графикой. Заказчики просят добавить ватермарки, сделать превьюшки картинок, построить графики… В мире python для этого есть библиотека Pillow, которая действительно умеет если не всё, то очень многое.

Установка pillow

Pillow далеко не самостоятельная библиотека, ей необходима поддержка форматов сжатия файлов. Для ubuntu как правило хватает установки следующих пакетов:

То есть работы с jpg, png, ttf (шрифты) и gzip (нужен для некоторых форматов). Самое главное тут разделять сам объект Image (холст), который представляет собой абстрактную картинку, от его представления на диске в виде файла. Попробуем поиграться:

Пример

Ничего сложного - рисование примитивов и текста. Такое в жизни вряд ли пригодится, так что этот пример исключительно для ознакомления с базовыми возможностями.

Создание превью изображения

Существует куча разных библиотек для создания и хранения превьюшек картинок. В своих проектах на Django я использую sorl-thumbnail. В принципе она всем устраивает, большой плюс что она хранит ссылки на все сгенерированные изображения. Таким образом при смене основного изображения превьюшки пересоздаются заново. До недавнего времени там был критичный баг, но после небольших уговоров автор его закрыл.

Но не всегда разумно тянуть в проект такую махину. Порой хочется чего-нибудь лёгкого и простого. Например, как-то так:

Что может быть проще! :) У Image ещё есть метод resize , но, в отличие от thumbnail , он не сохраняет соотношение сторон (aspect ratio). Т.е. в примере выше картинка будет ужата до 64 пикселей по большей стороне.

Наложение ватермарка

Как всегда для Django есть уже готовая библиотека, но нам же интересно самим всё сделать, правда ведь? :) В качестве водяного знака возьмём вот этого котика, повёрнутого на 45 градусов. Нууу… все же любят котиков…

Watermark

Таким вот образом можно наложить изображения друг на друга, но на водяной знак это смахивает лишь очень отдалённо. Хм, opacity 0.1, rotate 30 . Кстати, тут мы работаем с прозрачными изображениями, так что вместо обычного метода Image.paste надо использовать Image.alpha_composite - он сохраняет альфа-каналы.

Watermark result

Склейка изображений

Ещё один пример работы с изображениями - компоновка нескольких в одно. Как пример это может быть массив спрайтов (для web) или фреймов для анимации какой-нибудь 2D игрушки (Да-да, я знаю, что велосипедов и так уже полно, и некоторые даже работают, но у них есть фатальный недостаток :) ). Мне же понадобилось из картинок-элементов собрать таблицу Менделеева. Так что код из рабочего проекта:

Склейка изображения

В images передаётся матрица из объектов типа Image . В первом блоке вычисляются размеры результирующего холста, а во втором вставляются картинки согласно элементам матрицы. Если будет интересно, то в комментариях могу выложить полный код по склейке таблицы Менделеева из готовых png и саму таблицу для печати.

Генерация gif

Переходим к генерации gif из получившихся картинок. Вот здесь всё несколько неочевидно. Беглое гугление говорит, что есть специальная библиотечка images2gif (только python2), однако сам автор просит её не использовать. Некоторые предлагают вызывать convert -delay 20 -loop 0 *jpg animated.jpg , но что-то всё это костылями попахивает, неужели сам Pillow не умеет склеивать png в gif?! Конечно же умеет! Причём сам, без библиотеки pillow-images2gif. Пусть у нас в каталоге data/png находятся 10 файлов вида 000.jpg, 001.jpg, 002.jpg… Тогда склеить их в один gif можно таким кодом:

Это код для Python3, так что map пришлось распаковать в список. Ух, прям обожаю функциональщину - так много делается всего в одной строчке :) С помощью внутреннего map создаётся итератор по списку Image для каждого файла, а потом к каждому Image применяется функция prepare. Её назначение заключается лишь в подготовке кадра - привести к одному размеру и сделать фон белым вместо прозрачного. К сожалению, иного способа кроме как положить png (переменная img) на белый холст (переменная bg) для удаления прозрачности я не нашёл. Согласен, как-то некрасиво получается… Зато потом одной командой save оно само как-то всё склеивается. Посмотреть можно здесь.

А теперь наоборот

Зачастую надо не собрать gif из картинок, а наоборот разбить (а потом, возможно, сохранить в новый gif). Pillow умеет и это:

Нельзя просто так взять и сохранить gif по кадрам

К сожалению, здесь может быть не так просто из-за формата gif. В нём каждый кадр может содержать свою собственную палитру. Это помогает в уменьшении размеров файла, но накладывает дополнительные трудности при работе с ним. Причём палитра может вычисляться как дифф от предыдущего кадра с одним “прозрачным” цветом. То есть, надо накапливать разницу цветов, учитывая ту же прозрачность, но поля этого блога слишком малы, чтобы привести решение :)

Python

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

Общие задачи сводятся к отображению изображения и выполнению основных операций (кадрирование, отражение, вращение, сегментация, классификация, извлечение признаков, восстановление и распознавание). Python является отличным средством для решения подобных задач. Благодаря доступности и растущей популярности Python в качестве языка научно-технического программирования, внутри экосистемы появилось множество первоклассных инструментов для обработки изображений.

Давайте рассмотрим популярные Python-библиотеки для работы с изображениями.

1. scikit-image

scikit-image — это Python­-пакет с открытым кодом, который работает с массивами NumPy . Он реализует алгоритмы и утилиты для использования в исследовательских, образовательных и промышленных приложениях. Это весьма простая и понятная библиотека даже для новичков в экосистеме Python. Данная библиотека содержит высококачественный и рецензированный код, написанный активным сообществом добровольцев.

Ресурсы

Библиотека хорошо задокументирована с обилием практических примеров. Ознакомиться с документацией можно здесь.

Примеры

Пакет импортируется как skimage , а большинство функций находится внутри подмодулей. Несколько примеров использования skimage :



Больше примеров доступно в галерее.

2. NumPy

NumPy — это одна из основных Python-библиотек с поддержкой массивов. Изображение представляет собой стандартный массив NumPy, содержащий пиксели точек данных. Таким образом, при выполнении основных NumPy-операций (срезы, маски, прихотливое индексирование) мы можем изменять пиксельные значения изображения. Само изображение можно загрузить через skimage и отобразить с помощью Matplotlib .

Ресурсы

Все ресурсы и документация доступны на официальной странице NumPy.

Пример

Маскирование изображения через NumPy:


3. SciPy

SciPy — это такой же важный научный модуль в Python, как и NumPy. Он подходит для решения основных задач по обработке и прочей работе с изображениями. В частности, в подмодуле scipy.ndimage доступны функции, которые работают в n-мерных массивах NumPy. Текущий пакет включает в себя функции для линейной и нелинейной фильтрации, бинарной морфологии, интерполяции В-сплайнами и измерений объектов.

Ресурсы

Полный список функций в пакете scipy.ndimage доступен в документации.

Пример

Использование SciPy для размытия изображений с помощью фильтра Гаусса:


4. PIL/ Pillow

PIL (Python Imaging Library) — это бесплатная Python-библиотека для открытия, работы и сохранения различных форматов изображений. К сожалению, ее разработка окончательно остановилась, а последнее обновление вышло в 2009. К счастью, есть Pillow — активно развивающийся форк PIL с простой установкой. Он работает на всех основных операционных системах и поддерживает Python 3. Библиотека содержит базовый функционал для обработки изображений, включая точечные операции, фильтры с набором встроенных ядер свертки и преобразование цветового пространства.

Ресурсы

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

Пример

Улучшение изображения через ImageFilter в Pillow:


5. OpenCV-Python

OpenCV (Open Source Computer Vision Library) — одна из самых популярных библиотек для приложений по компьютерному зрению.OpenCV-Python — это Python-версия интерфейса для OpenCV. Наличие кода на C/C++ в бэкенде гарантирует быстроту библиотеки, а Python­-обертка во фронтенде обеспечивает легкость настройки и развертывания. Благодаря этому OpenCV-Python является отличным решением для высоконагруженных вычислительных программ по компьютерному зрению.

Ресурсы

Руководство по OpenCV2-Python поможет быстрее освоиться в библиотеке.

Пример


6. SimpleCV

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

Ресурсы

Понятная документация с множеством практических примеров.

Пример


7. Mahotas

Mahotas также является Python-библиотекой для компьютерного зрения и обработки изображений. Она содержит стандартные функции по обработке изображений (фильтры и морфологические операции), а также современные возможности компьютерного зрения для вычисления признаков (обнаружение особых точек и локальные дескрипторы). Быстрота разработки обеспечивается Python-интерфейсом, а плюсом для скорости служат алгоритмы на С++. Mahotas — это быстрая библиотека с минималистичным кодом и зависимостями. Более подробно описано в документации.

Ресурсы

Документация содержит инструкции по установке, практические примеры, а также пошаговые уроки по освоению Mahotas.

Пример



8. SimpleITK

Ресурсы

Jupyter Notebook показывает использование SimpleITK в образовательных и исследовательских целях. Он также демонстрирует возможности SimpleITK по интерактивному анализу изображений с использованием языков программирования Python и R.

Пример

Анимация ниже — это визуализация процесса преобразования при регистрации КТ- и МРТ-снимков в SimpleITK и Python. Исходный код доступен здесь.

9. pgmagick

pgmagick — обертка на базе Python для библиотеки GraphicsMagick. Систему GraphicsMagickиногда называют швейцарским ножом в обработке изображений. Она предлагает коллекцию эффективных инструментов и библиотек, поддерживающих чтение, запись и операции с изображениями в более чем 88 основных форматах, включая DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM и TIFF.

Ресурсы

pgmagick посвящен целый репозиторий Github. Там вы найдете инструкции по установке и основные требования. Также имеется подробное руководство пользователя.

Примеры

Вот несколько операций с изображениями, которые можно выполнить в pgmagick:



10. PyCairo

PyCairo представляет собой набор привязок Python-кода для графической библиотеки Cairo. Cairo — это 2D-библиотека для отрисовки векторной графики. Векторная графика интересна тем, что не теряет своей четкости при изменении размеров или трансформации. PyCairo — это набор привязок для Cairo, с помощью которых можно вызывать Cairo-команды из Python.

Ресурсы

Подробная информация по установке и работе доступна в GitHub-репозитории PyCairo. Есть еще вводное руководство с кратким описанием PyCairo.

Примеры

Отрисовка линий, базовых фигур и радиальных градиентов.


Заключение

Существует ряд полезных и бесплатных библиотек по обработке изображений в Python. Какие-то из них широко известны, а о некоторых вы слышите впервые. Поработайте с разными библиотеками и подберите ту, что подходит именно вам.

Python 3 библиотека Pillow для работы с изображением

В этой статье вы узнаете что за библиотека Pillow в Python 3, как её установит и для чего она вообще нужна, будет очень интересно и полезно.

Как установить Pillow:

Устанавливаем её как и все библиотеки для языка программирования Python, через менеджер пакетов PIP.

Вот что вам надо ввести в терминал, чтобы скачать:

Теперь вы можете с ней работать.

Для чего нужна библиотека Pillow:

Эта библиотека нужна для работы с изображением, вот и всё для чего она используется. С её помощью вы сможете открывать изображения, редактировать и переформатировать, и куча всего ещё.

Работа с библиотекой Pillow:

После того как вы всё установили, вы можете начать с ней работать, в первую очередь вам надо импортировать библиотеку и открывать файл.

Вот как это делается:

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

Следующие давайте выведем данные о картинке, вот как мы это сделаем:

Тут мы в терминале вывели сначала формат файла, потом размер картинки, то есть её ширину и высоту, ну и последние показали её цветовое пространство.

Вот что у нас отображается в терминале:

Для вывода изображения используете метод show(), примерно так:

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

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

Вывод:

В этой статье вы прочитали что за библиотека Pillow для Python 3, как её установить и работать с ней, думаю вам было интересно и полезно, если это так, то почитайте её документацию.

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