-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCartoon.py
37 lines (32 loc) · 1.26 KB
/
Cartoon.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import cv2
from cv2 import ADAPTIVE_THRESH_GAUSSIAN_C
from cv2 import ADAPTIVE_THRESH_MEAN_C
from cv2 import THRESH_BINARY
import numpy as np
def read_img(filename):
img=cv2.imread('download.jpg')
return img
def edge_detection(img,line_wdt,blur):
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
grayBlur=cv2.medianBlur(gray,blur)
edges=cv2.adaptiveThreshold(grayBlur,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,line_wdt,blur)
return edges
def color_quantisation(img,k):
data=np.float32(img).reshape(-1,3)
criteria=(cv2.TermCriteria_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
img= read_img('./download.jpg')
line_wdt=9
blur_value=7
totalColors=4
edgeimg=edge_detection(img,line_wdt,blur_value)
img=color_quantisation(img,totalColors)
blurred=cv2.bilateralFilter(img,d=7,sigmaColor=200,sigmaSpace=200)
cartoon=cv2.bitwise_and(blurred,blurred,mask=edgeimg)
cv2.imwrite('cartoon.jpeg',cartoon)
cv2.imwrite('edgeimage.jpg',edgeimg)
cv2.imwrite('colorquantised.jpg',img)