Автоматизируем обработку изображений с помощью Jupyter и Python

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





Недавно мой ребёнок захотел сделать раскраску для персонажа из любимого мультфильма. Очевидным решением было использовать какой-нибудь графический редактор для Linux (потому что я линуксоид), но потом я вспомнил, что я ленивый человек :)

К счастью, я знаком с Python и JupyterLab. Посмотрим, насколько Jupyter облегчит задачу.

В первую очередь, нам, конечно, понадобится современная версия Python (если вы пользователь macOS, вы можете следовать этому руководству). Затем нужно установить и открыть JupyterLab и Pillow — форк библиотеки Python Imaging Library (PIL):

$ python -V

Python 3.8.5

$ pip install jupyterlab pillow

……………………..

$ jupyter lab


В данном случае мы хотим сделать раскраску с изображением оленя. Для начала загрузим изображение и сохраним его локально. Лучше всего использовать картинки с Creative Commons или другой открытой лицензией, чтобы не заморачиваться с авторскими правами. В этом примере я использовал изображение с открытой лицензией от Unsplash и назвал его deer.jpg.

Начнём с импорта:

from PIL import Image


Откроем изображение и проверим его размер:

pic = Image.open("deer.jpg")
pic.size
(3561, 5342)


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

x, y = pic.size

x //= 10

y //= 10

smaller = pic.resize((x, y))


Размер стал в 10 раз меньше.

smaller




Прекрасно. Двигаемся дальше.

Этот олень должен быть лёгкой добычей для алгоритма обнаружения границ. Нужно очистить изображение, чтобы раскрашивание было лёгким. И, к счастью, для этого тоже есть готовый алгоритм:

from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)

edges




Это, наверное, самый важный шаг. Мы уберём все посторонние детали и оставим чёткие линии. Цвет немного странный, но решить эту проблему несложно. Разделим изображение на цветовые полосы и выберем ту, где линии наиболее чёткие:


bands = edges.split()
bands[0]




Теперь линии чёткие, но сама палитра пока не подходит для печати, потому что в вашем принтере закончатся чернила, да и вашему ребёнку не понравится раскрашивать картинку на чёрном фоне. Так что инвертируем цвета. Установим для x пороги max-black и max-white, чтобы сделать линии еще более чёткими:


outline = bands[0].point(lambda x: 255 if x<100 else 0)
outline




Теперь обратим внимание, что на картинке осталось много пустого места, поэтому обрежем её:

outline.crop((10, 200, 300, 400))




Ну и всё. Сохраним картинку в формате PDF (для печати):

outline.save("deer.pdf")


Вот так можно легко самостоятельно сделать раскраски для ваших детей: минимум рутины, максимум программирования!



На правах рекламы


Эпичные серверы — это VPS на Linux или Windows с мощными процессорами семейства AMD EPYC и очень быстрыми NVMe дисками Intel. Расходятся, как горячие пирожки!

Источник: https://habr.com/ru/company/vdsina/blog/515440/


Интересные статьи

Интересные статьи

В этом посте я постараюсь раскрыть тему написания несложного модульного приложения на языке C89 для обработки 24-битных BMP изображений, использующего в своей работе прос...
Уже прошло почти восемь месяцев 2020 года, а технические прогнозы на этот год всё выходят и выходят. И это — несмотря на то, что очень сложно предсказать будущее в такой динамично раз...
Мы просмотрели и сравнили 10 000 open source библиотек для Python и выбрали 34 самые полезные. Мы сгруппировали эти библиотеки в 8 категорий.
Компании растут и меняются. Если для небольшого бизнеса легко прогнозировать последствия любых изменений, то у крупного для такого предвидения — необходимо изучение деталей.
Это пошаговая инструкция по классификации мультиспектральных снимков со спутника Landsat 5. Сегодня в ряде сфер глубокое обучение доминирует как инструмент для решения сложных проблем, в том ...