
Pengarang: Rokas Balsys
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Dalam tutorial ini, saya akan menunjukkan kepada Anda bagaimana kita dapat membuat gambar sketsa “pensil” menggunakan Python hanya dengan beberapa baris kode.
https://medium.com/media/b2843bcd3cd131cd1ae98fa521758a6e/href
Saya selalu terpesona oleh visi komputer, terutama kekuatannya untuk memanipulasi gambar dalam perkalian matriks yang cepat. Gambar adalah array angka dalam Python. Jadi kita bisa melakukan berbagai manipulasi matriks untuk mendapatkan hasil yang menarik. Jadi, di tutorial sebelumnya, kita belajar cara memisahkan diri dari latar belakang, mendeteksi wajah, dan melakukan semua ini secara real-time. Dalam tutorial ini, saya akan menunjukkan kepada Anda bagaimana kita dapat membuat gambar sketsa “pensil” hanya dengan beberapa baris kode.
Prosesnya cukup sederhana:
Skala abu-abu gambar; Balikkan warnanya; Mengaburkan gambar terbalik; Terapkan campuran Dodge ke gambar buram dan skala abu-abu.
Kita dapat memilih gambar apapun yang kita inginkan untuk ini. Tapi saya akan mendemonstrasikan cara membuat objek yang dapat kita terapkan ke gambar, video, atau aliran waktu nyata apa pun. Saya akan melakukan ini untuk memperluas fungsionalitas proyek penghapusan latar belakang yang sedang saya kerjakan dalam seri tutorial ini.
Impor perpustakaan
OpenCV dan Numpy adalah satu-satunya perpustakaan yang diperlukan untuk proyek tersebut. Kami mengimpornya dengan dua baris kode berikut:
https://medium.com/media/055bc358c2c975d706fb7e532520e544/href
Baca Foto
Berikut adalah salah satu perintah yang dapat digunakan untuk membaca gambar yang disimpan pada disk menggunakan OpenCV:
https://medium.com/media/b505b59c780f8b37e485792f372c8672/href
Perintah ini membaca file “image.png” yang terletak di folder saat ini pada disk dan disimpan dalam memori sebagai bingkai. Tapi seperti yang saya sebutkan, ini bisa berupa urutan bingkai atau gambar yang dimuat dengan metode lain.
Tampilkan gambar menggunakan OpenCV
Langkah penting berikutnya saat membuat sketsa seperti itu di proyek kami adalah mengetahui cara melihat hasilnya dengan cepat tanpa menyimpannya di disk. Perintah OpenCV berikut dapat digunakan untuk menampilkan gambar di layar:
https://medium.com/media/61bb123b2dec961b64b01ab954949e25/href
Ketika baris-baris ini dijalankan, gambar akan terbuka di jendela baru dengan judul sebagai ‘gambar’:
Skala abu-abu gambar
Pertama, apa yang perlu kita lakukan dengan gambar kita, adalah membuatnya menjadi abu-abu (mengubahnya menjadi hitam putih). Kita dapat melakukannya dengan pustaka cv2 atau numpy. Tetapi numpy tidak memiliki fungsi bawaan untuk penskalaan abu-abu. Tetapi kita dapat dengan mudah mengonversi gambar kita menjadi skala abu-abu, mengetahui matematika di balik itu. Tapi tidak masuk ke matematika, rumusnya akan terlihat sebagai berikut:
https://medium.com/media/f8b8394613011b786aa055a24c8861df/href
Di sini kita mengalikan saluran gambar RGB dengan nilai yang sesuai dan menggabungkannya ke satu saluran. Karena itu, kita perlu kembali ke gambar 3 layer; kami melakukannya dengan fungsi tumpukan numpy. Inilah yang kami dapatkan:
Balikkan gambar
Sekarang kita perlu membalikkan gambar. Ketika saya mengatakan terbalik, maksud saya putih harus menjadi hitam dan sebaliknya bijaksana. Ini sesederhana hanya mengurangi 255 dari setiap piksel gambar. Karena, secara default, gambar adalah 8bit dan memiliki maksimum 256 nada:
https://medium.com/media/6ab3228dee503eaf0f9bc4774cbfe714/href
Saat kami menampilkan gambar terbalik atau menyimpannya di disk, kami menerima gambar berikut:
mengaburkan gambar
Sekarang kita perlu mengaburkan gambar terbalik. Pengaburan dilakukan dengan menerapkan filter Gaussian ke gambar terbalik. Yang paling penting di sini adalah varians dari fungsi Gaussian atau sigma. Saat sigma meningkat, gambar menjadi lebih kabur. Sigma mengontrol jumlah dispersi dan, oleh karena itu, tingkat kekaburan. Nilai sigma yang sesuai dapat dipilih dengan coba-coba:
https://medium.com/media/740ec10fe608bcae4a483ed98eee0e5a/href
Hasil gambar buram terlihat sebagai berikut:
Dodge dan Gabung
Mode blending Color Dodge membagi lapisan bawah dari lapisan atas terbalik. Ini mencerahkan lapisan bawah tergantung pada nilai lapisan atas. Kami memiliki gambar buram yang menyoroti tepi paling berani.
https://medium.com/media/11d4d50df6b39a3ffc82e35116c9964a/href
Dan itu saja! Berikut adalah hasilnya:
Berikut adalah kode sketsa pensil lengkap untuk objek:
https://medium.com/media/8fc5b3a6a5b905b831d2f31c3c4fcaf8/href
Dimungkinkan untuk menebak bahwa kita tidak memiliki banyak ruang untuk dimainkan di sini selain parameter blur_sigma selama blur. Saya menambahkan fungsi tambahan untuk mempertajam gambar untuk mengatasi masalah ini. Hasil penajaman dapat dilihat pada GIF animasi ini:
Ini sangat mirip dengan proses pengaburan, kecuali bahwa sekarang, alih-alih membuat kernel untuk rata-rata setiap intensitas piksel, kami membuat kernel yang akan membuat intensitas piksel lebih tinggi dan, oleh karena itu, lebih terlihat oleh mata manusia.
Berikut adalah kode dasar tentang cara menggunakan objek PencilSketch untuk gambar teras kita:
https://medium.com/media/d215380fb0e77ec6f1549703ec973680/href
Hasil dari kode diatas bisa anda lihat seperti berikut :
Kesimpulan:
Itu adalah tutorial yang cukup bagus yang tidak memerlukan pengetahuan python yang mendalam untuk mencapai gaya sketsa “pensil” yang menakjubkan ini dari gambar apa pun. Saat menggunakan file proyek saya dari GitHub dan objek Engine, Anda dapat dengan mudah menerapkan efek ini ke gambar, video, atau aliran kamera web waktu nyata.
Dalam tutorial berikutnya, saya akan membahas sesuatu yang lebih menarik. Saya berpikir tentang pengenalan wajah karena kami sudah menerapkan deteksi wajah. Apa yang tersisa — kenali seseorang di wajah itu.
Terima kasih sudah membaca! Seperti biasa, semua kode yang diberikan dalam tutorial ini dapat ditemukan di halaman GitHub saya dan gratis untuk digunakan!
Awalnya diterbitkan di https://pylessons.com/pencil-sketch
Gambar Sketsa Pensil Dengan Python awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI