Mengotomatiskan pemrosesan gambar dengan Jupyter dan Python

Anda mungkin tidak ingin memahami pemrosesan gambar di editor grafis jika Anda tahu cara melakukannya menggunakan pustaka sumber terbuka untuk Python.







Baru-baru ini, anak saya ingin membuat pewarnaan untuk tokoh kartun favoritnya. Solusi yang jelas adalah menggunakan semacam editor grafis untuk Linux (karena saya pengguna Linux), tetapi kemudian saya ingat bahwa saya adalah orang yang malas.



Untungnya, saya sudah familiar dengan Python dan JupyterLab. Mari kita lihat bagaimana Jupyter mempermudah tugas.



Pertama-tama, tentunya kita membutuhkan Python versi modern (jika Anda pengguna macOS, Anda bisa mengikuti tutorial ini ). Kemudian Anda perlu menginstal dan membuka JupyterLab dan Pillow - cabang dari Python Imaging Library (PIL):



$ python -V

Python 3.8.5

$ pip install jupyterlab pillow

……………………..

$ jupyter lab


Dalam hal ini, kami ingin melukis dengan gambar rusa. Pertama, mari unduh gambar dan simpan secara lokal. Cara terbaik adalah menggunakan gambar dari Creative Commons atau lisensi sumber terbuka lainnya sehingga Anda tidak peduli dengan hak cipta. Dalam contoh ini, saya menggunakan gambar open source dari Unsplash dan menamakannya deer.jpg.



Mari kita mulai dengan mengimpor:



from PIL import Image


Mari buka gambar dan periksa ukurannya:



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


Ini mungkin terlalu berlebihan untuk tugas kita. Gambar beresolusi tinggi ini bagus untuk buku, bukan halaman mewarnai. Kurangi ukuran gambar:



x, y = pic.size

x //= 10

y //= 10

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


Ukurannya menjadi 10 kali lebih kecil.



smaller






Sempurna. Bergerak.



Rusa ini harus menjadi mangsa empuk untuk algoritma deteksi batas. Kita perlu membersihkan gambar untuk memudahkan pewarnaan. Dan, untungnya, ada algoritma yang siap pakai untuk ini juga:



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

edges






Ini mungkin langkah paling penting. Kami akan menghapus semua detail yang tidak relevan dan meninggalkan garis yang jelas. Warnanya agak aneh, tetapi masalah ini tidak sulit dipecahkan. Bagilah gambar menjadi garis-garis warna dan pilih gambar dengan garis paling jelas:




bands = edges.split()
bands[0]






Sekarang garis-garisnya sudah jelas, tetapi paletnya sendiri belum cocok untuk dicetak, karena printer Anda akan kehabisan tinta, dan anak Anda tidak akan suka melukis gambar dengan latar belakang hitam. Jadi kami membalikkan warnanya. Setel ambang batas untuk x menjadi hitam-maks dan putih-maks untuk membuat garis semakin berbeda:




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






Sekarang mari perhatikan bahwa ada banyak ruang kosong yang tersisa di gambar, jadi mari kita crop:



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






Nah, itu saja. Mari simpan gambar dalam format PDF (untuk dicetak):



outline.save("deer.pdf")


Beginilah cara Anda dapat dengan mudah membuat halaman mewarnai sendiri untuk anak-anak Anda: rutinitas minimum, pemrograman maksimum!






Periklanan



Server Epic adalah Linux atau Windows VPS dengan prosesor AMD EPYC yang kuat dan drive Intel NVMe yang sangat cepat. Bubar seperti kue panas!






All Articles