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
![]() |
gambar_input.jpg |
Foto sesudah
![]() |
gambar_output.jpg |
Coba mainkan aja beberapa parameter yang digunakan dalam script di atas, siapa tau bisa dapat kombinasi hasil yang lebih ciamik...
Reference: