|
import cv2 |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
|
|
def edge_mask(img, line_size=7, blur_value=7): |
|
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) |
|
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 |
|
|
|
def color_quantization(img,k): |
|
data = np.float32(img).reshape((-1,3)) |
|
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,20,0.001) |
|
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 cartoon(img,params=[7,7,11]): |
|
|
|
edges = edge_mask(img, params[0], params[1]) |
|
res = color_quantization(img,params[2]) |
|
blurr = cv2.bilateralFilter(res, d=7, sigmaColor=200,sigmaSpace=200) |
|
c = cv2.bitwise_and(blurr,blurr,mask=edges) |
|
return c |