Поиск по сайту:

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


Кому нужно изучать приложение для редактирования изображений, если вы можете выполнить эту работу с помощью уже известных вам инструментов с открытым исходным кодом?

Недавно мой малыш захотел сделать раскраску по любимому мультфильму. Моей первой мыслью было использовать одну из программ с открытым исходным кодом для Linux, которые манипулируют изображениями, но потом я вспомнил, что понятия не имею, как использовать любую из них. К счастью, я знаю, как использовать Jupyter и Python.

Насколько сложно, подумал я, использовать для этого Jupyter?

Чтобы следовать инструкциям, вам понадобится современная версия Python (если вы пользователь macOS, вы можете следовать этому руководству), затем установите и откройте Jupyter Labs, о которой вы можете узнать больше здесь, и Pillow, дружественный форк. библиотеки изображений Python (PIL) с:

$ python -V
Python 3.8.5
$ pip install jupyterlab pillow
# Installation process ommitted
$ jupyter lab

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

Перейдя в Jupyter Lab, начните с импорта PIL:

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

(Моше Задка, CC BY-SA 4.0)

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

from PIL import ImageFilter

edges = smaller.filter(ImageFilter.FIND_EDGES)
edges

(Моше Задка, CC BY-SA 4.0)

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

bands = edges.split()
bands[0]

(Моше Задка, CC BY-SA 4.0)

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

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

(Моше Задка, CC BY-SA 4.0)

В исходном изображении было много природы, которую я безжалостно очистил. Теперь там много пустого места, поэтому обрезаем картинку до самого необходимого:

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

(Моше Задка, CC BY-SA 4.0)

Все, что осталось, — это сохранить изображение в формате, который можно легко распечатать, например в формате PDF:

outline.save("deer.pdf")

Я расскажу вам, как печатать из Linux.

Получайте удовольствие, создавая домашние раскраски для своих детей!