Automatizando o processamento de imagens com Jupyter e Python

Você provavelmente não vai querer entender o processamento de imagens em editores gráficos se souber como fazê-lo usando bibliotecas de código aberto para Python.







Recentemente, meu filho queria fazer uma coloração para um personagem de seu desenho animado favorito. A solução óbvia era usar algum tipo de editor gráfico para Linux (porque sou um usuário Linux), mas então me lembrei que sou uma pessoa preguiçosa.



Felizmente, estou familiarizado com Python e JupyterLab. Vamos ver como o Jupyter torna a tarefa mais fácil.



Em primeiro lugar, é claro que precisaremos de uma versão moderna do Python (se você for um usuário do macOS, pode seguir este tutorial ). Em seguida, você precisa instalar e abrir o JupyterLab e o Pillow - um fork da Python Imaging Library (PIL):



$ python -V

Python 3.8.5

$ pip install jupyterlab pillow

……………………..

$ jupyter lab


Neste caso, queremos pintar com a imagem de um cervo. Primeiro, vamos baixar a imagem e salvá-la localmente. É melhor usar imagens do Creative Commons ou outras licenças de código aberto para que você não se preocupe com direitos autorais. Neste exemplo, usei uma imagem de código aberto da Unsplash e a chamei de deer.jpg.



Vamos começar importando:



from PIL import Image


Vamos abrir a imagem e verificar seu tamanho:



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


Isso talvez seja um pouco demais para a nossa tarefa. Essas imagens de alta resolução são boas para livros, não para colorir. Reduza o tamanho da imagem:



x, y = pic.size

x //= 10

y //= 10

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


O tamanho ficou 10 vezes menor.



smaller






Perfeitamente. Se movendo.



Este cervo deve ser uma presa fácil para o algoritmo de detecção de limites. Precisamos limpar a imagem para facilitar a coloração. E, felizmente, também existe um algoritmo pronto para isso:



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

edges






Esta é provavelmente a etapa mais importante. Removeremos todos os detalhes estranhos e deixaremos linhas claras. A cor é um pouco estranha, mas esse problema não é difícil de resolver. Divida a imagem em listras coloridas e selecione aquela com as linhas mais claras:




bands = edges.split()
bands[0]






Agora as linhas estão claras, mas a paleta em si ainda não é adequada para impressão, porque sua impressora ficará sem tinta e seu filho não gostará de pintar uma imagem em um fundo preto. Então, invertemos as cores. Defina os limites de x para max-black e max-white para tornar as linhas ainda mais distintas:




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






Agora vamos prestar atenção, pois há muito espaço vazio na imagem, então vamos recortá-lo:



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






Bom, isso é tudo. Vamos salvar a imagem em formato PDF (para impressão):



outline.save("deer.pdf")


Assim você poderá fazer facilmente suas próprias páginas para colorir para seus filhos: rotina mínima, programação máxima!






Publicidade



Os servidores Epic são Linux ou Windows VPSs com poderosos processadores AMD EPYC e drives Intel NVMe muito rápidos. Dispersem-se como bolos quentes!






All Articles