Редактируйте изображения с помощью 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.
Получайте удовольствие, создавая домашние раскраски для своих детей!