Membuat Efek Kartun pada Foto dengan Python

Library python yang kita butuhkan untuk script ini adalah cv2, silakan install dulu dengan cara

pip install opencv-python

Kemudian simpan kode berikut di sebuah file dengan ekstensi .py, misal kartun.py:

import cv2
import numpy as np

filename = "gambar_input.jpg"

def read_file(filename):
  img = cv2.imread(filename)
  # cv2.imshow(img)
  return img

def color_quantization(img, k):
# Transform the image
  data = np.float32(img).reshape((-1, 3))

# Determine criteria
  criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 0.001)

# Implementing K-Means
  ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
  center = np.uint8(center)
  result = center[label.flatten()]
  result = result.reshape(img.shape)
  return result

def edge_mask(img, line_size, blur_value):
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  gray_blur = cv2.medianBlur(gray, blur_value)
  edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, line_size, blur_value)
  return edges

img = read_file(filename)

line_size = 7
blur_value = 7

edges = edge_mask(img, line_size, blur_value)
# cv2.imshow(edges)

total_color = 9

img = color_quantization(img, total_color)
# cv2.imshow(img)

blurred = cv2.bilateralFilter(img, d=7, sigmaColor=200,sigmaSpace=200)
# cv2.imshow(blurred)

cartoon = cv2.bitwise_and(blurred, blurred, mask=edges)
# cv2.imshow('', cartoon)
# cv2.waitKey(0)
cv2.imwrite("gambar_output.jpg", cartoon)


Sesuaikan variabel filename dengan foto yang ingin Anda ubah, atau agar lebih mudah, pastikan file gambar berada pada direktori yang sama dengan script ini. Untuk pengguna lanjut, silakan sesuaikan path nya, atau tambahkan library sys.argv agar lebih fleksibel.

Foto sebelum

membuat efek cartoon pada foto dengan python
gambar_input.jpg

Foto sesudah

membuat efek cartoon pada foto dengan python
gambar_output.jpg

Coba mainkan aja beberapa parameter yang digunakan dalam script di atas, siapa tau bisa dapat kombinasi hasil yang lebih ciamik...

Reference: