Cartoon Effect & Pencil Sketch Using Python

PUTRI ERMAYANI
4 min readJan 11, 2021

--

Assalamualaikum Warahmatullahi Wabarakatuh.

Pada kesempatan ini akan dibahas cara mengubah gambar menjadi cartoon effect dan pencil sketch menggunakan python.

Oke, langsung saja kita uraian skrip yang akan digunakan.

1. Menampilkan Gambar

Pertama dibuat skrip untuk manampilkan gambar yang akan diubah menjadi bentuk kartun dan sketsa pensil. Skrip yang digunakan adalah sebagai berikut,

import cv2 
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True, help = "Path to the image")
args = vars(ap.parse_args())
# Loading image
image = cv2.imread(args["image"])
img = cv2.resize(image, (950, 650))
cv2.imshow("Image", img)
cv2.waitKey()
cv2.destroyAllWindows()

Simpan skrip tersebut sebagai “image.py”, kemudian buka command promt dan jalankan perintah “python image.py --image images/example.jpg”. Sebelumnya, gambar yang telah di download dan disimpan dalam folder “images”. Berikut adalah gambar yang berhasil ditampilkan dengan skrip “image.py”.

2. Cartoon Image

Selanjutnya gambar akan diubah menjadi cartoon effect dengan menggunakan fungsi cv2.stylization. Fungsi stylization digunakan untuk menciptakan efek smoothing warna dan gambar. Pada skrip “image.py” tambahkan perintah berikut,

cartoon_image = cv2.stylization(color_image, sigma_s=150, sigma_r=0.25) 
cv2.imshow(‘cartoon’, img)

Lengkapnya,

import cv2 
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True, help = "Path to the image")
args = vars(ap.parse_args())
# Loading image
image = cv2.imread(args["image"])
img = cv2.resize(image, (950, 650))
cartoon_image = cv2.stylization(img, sigma_s=150, sigma_r=0.25)
cv2.imshow('cartoon', cartoon_image)
cv2.waitKey()
cv2.destroyAllWindows()

Setelah skrip disimpan, kemudian jalankan kembali perintah pada command prompt. Maka akan muncul tampilan gambar dengan cartoon effect sebagai berikut,

3. Pencil Skecth

Untuk mengubah gambar menjadi gambar garis non-fotorealistik seperti pensil, gunakan fungsi cv2.pencilSketch. Parameter yang digunakan dalam fungsi tersebut meliputi :

  1. Sumber gambar : pada skrip ini adalah “img”.
  2. Sigma_s : rentang antara 0 hingga 200.
  3. Sigma_r : rentang antara 0 hingga 1.
  4. Shade_factor : rentang antara 0 hingga 0,1.

Berikut adalah skrip yang digunakan.

cartoon_image1, cartoon_image2  = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.5, shade_factor=0.02) 
cv2.imshow(‘pencil’, cartoon_image1)

Lengkapnya,

import cv2 
import argparse
ap = argparse.ArgumentParser()
ap.add_argument(“-i”, “ — image”, required = True, help = “Path to the image”)
args = vars(ap.parse_args())
# Loading image
image = cv2.imread(args[“image”])
img = cv2.resize(image, (950, 650))
cartoon_image1, cartoon_image2 = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.5, shade_factor=0.02)
cv2.imshow(‘pencil’, cartoon_image1)
cv2.waitKey()
cv2.destroyAllWindows()

Untuk cartoon_image1 akan muncul tampilan seperti berikut,

Untuk cartoon_image2 ubah skrip dengan perintah berikut,

cv2.imshow('pencil', cartoon_image2)    
cv2.waitKey()
cv2.destroyAllWindows()

Maka akan muncul tampilan sebagai berikut,

Cara lainnya untuk membuat pencil sketch adalah melakukan tahapan sebagai berikut,

1.Perintah untuk mengubah gambar menjadi gambar gray_scale : Gambar diubah menjadi grayscale yang setara menggunakan fungsi cv2.cvtColor. Mengubah gambar menjadi grayscale memberi pixel hitam & putih pada gambar yang digunakan untuk membuat pencil sketch.

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

2. Perintah untuk inverting gambar : membalikkan warna gambar menggunakan fungsi cv2.bitwise. Fungsi bitwise_not yang digunakan untuk membuat area yang lebih cerah menjadi lebih terang dan sebaliknya sehingga dapat menemukan tepi untuk membuat pencil sketch.

img_invert = cv2.bitwise_not(img_gray)

3. Perintah untuk smoothing gambar : Penghalusan gambar menggunakan Fungsi Gaussian Blur. Teknik gaussian blur digunakan dengan pixel 21 x 21 dan filter nilai sigma default pada gambar untuk menghaluskan gambar. Dengan meningkatkan ukuran filter, dapat dibuat garis tipis untuk sketsa dan digunakan untuk mengurangi noise pada gambar.

img_smoothing = cv2.GaussianBlur(img_invert, (21, 21),sigmaX=0, sigmaY=0)

4. Sketsa pensil akhir dari gambar masukan menggunakan fungsi campuran dodgev2. Fungsi tersebut membagi nilai grayscale gambar dengan kebalikan dari nilai gambar buram yang menyoroti tepi paling tebal. Teknik ini digunakan oleh fotografer tradisional untuk mencetak foto dari reel.

def dodgeV2(x, y):
return cv2.divide(x, 255 - y, scale=256)
final_img = dodgeV2(img_gray, img_smoothing)
cv2.imshow('Skecth',final_img)

Lengkapnya,

import cv2 
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True, help = "Path to the image")
args = vars(ap.parse_args())
# Loading image
image = cv2.imread(args["image"])
img = cv2.resize(image, (950, 650))
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_invert = cv2.bitwise_not(img_gray)
img_smoothing = cv2.GaussianBlur(img_invert, (21, 21),sigmaX=0, sigmaY=0)
def dodgeV2(x, y):
return cv2.divide(x, 255 - y, scale=256)
final_img = dodgeV2(img_gray, img_smoothing)
cv2.imshow('Skecth',final_img)
cv2.waitKey()
cv2.destroyAllWindows()

Berikut adalah tampilan gambar setelah proses grayscale, invert, dan smoothing.

Hasil akhir pencil sketch sebagai berikut,

Cukup sekian pembahasan cartoon effect dan pencil sketch menggunakan python. Semoga bermanfaat.

Reference

  1. https://analyticsindiamag.com/converting-image-into-a-pencil-sketch-in-python/
  2. Bacaan lainnya.

--

--

No responses yet