漫画图片
椒盐噪声
又写了一个 gui , 只是描框
呵呵,中央七的节目动画就是用的这个技术。
# !/usr/bin/python # coding : cp936 # CopyRight 2012 Adou , All Rights Reserved . import cv , cv2 import math import os import sys def odd( num ) : num = int( num ) if num/2*2 == num : num -= 1 return num if __name__ == '__main__' : '''''' if len(sys.argv) == 1 : filenames = raw_input('File Name : ') filenames = filenames.split() else : filenames = sys.argv[1:] for filename in filenames : if not os.path.isfile(filename) : continue img = cv2.imread(filename) height , width , dim = img.shape #print height #print width #imgr = cv2.cvtColor(img,cv.CV_RGB2GRAY) #edge = cv2.Canny(imgr,125,135) #edge = cv2.Laplacian(imgr,-1) #cv2.Laplacian(imgr,-1,edge,3,1.0) #edge1 = cv2.GaussianBlur(img,tuple([3,3]),1.5) #edge2 = cv2.GaussianBlur(img,tuple([7,7]),1.5) #edge = edge1 - edge2 #cv2.imshow('canny',edge) #ch = cv2.waitKey(0) #if ch == 97 : #sys.exit(0) #imgLab = cv2.cvtColor(img,cv.CV_RGB2Lab) #imgLab = cv2.bilateralFilter(imgLab,10,20,5) # 6 #imgLab = cv2.bilateralFilter(imgLab,10,20,5) # 6 #img = cv2.cvtColor(imgLab,cv.CV_Lab2RGB) #imgLab = cv2.cvtColor(img,cv.CV_RGB2Lab) #for i in xrange(height) : #for j in xrange(width) : #imgLab[i,j,0] = imgLab[i,j,0] / 8 * 8 #img = cv2.cvtColor(imgLab,cv.CV_Lab2RGB) #img = cv2.cvtColor(img,cv.CV_RGB2Lab) #img = cv2.bilateralFilter(img,10,20,5) # 1 #img = cv2.bilateralFilter(img,10,20,5) # 2 #img = cv2.bilateralFilter(img,10,20,5) # 3 #img = cv2.bilateralFilter(img,10,20,5) # 4 #img = cv2.bilateralFilter(img,10,20,5) # 5 img = cv2.bilateralFilter(img,10,20,5) # 6 img = cv2.bilateralFilter(img,10,20,5) # 7 img = cv2.bilateralFilter(img,10,20,5) # 8 img = cv2.bilateralFilter(img,9,20,5) # 9 img = cv2.bilateralFilter(img,10,20,5) # 10 #img = cv2.bilateralFilter(img,16,32,8) # 2 #img = cv2.bilateralFilter(img,16,32,8) # 2 #img = cv2.bilateralFilter(img,16,32,8) # 2 #img = cv2.bilateralFilter(img,16,32,8) # 2 #img = cv2.bilateralFilter(img,16,32,8) # 2 #img = cv2.bilateralfilter(img,20,40,10) # 2 #img = cv2.bilateralfilter(img,20,40,10) # 2 #img = cv2.bilateralfilter(img,20,40,10) # 2 #img = cv2.bilateralfilter(img,20,40,10) # 2 #img = cv2.bilateralfilter(img,20,40,10) # 2 imgray = cv2.cvtColor(img,cv.CV_RGB2GRAY) #imgSmooth = cv2.cvtColor(imgray,cv.CV_Lab2RGB) imgSmooth = img.copy() edge1 = cv2.GaussianBlur(imgray,tuple([odd(height/100),odd(height/100)]),height/320.0) edge2 = cv2.GaussianBlur(imgray,tuple([odd(height/60+1),odd(height/60+1)]),height/320.0) sum1 = cv2.sumElems(edge1) sum2 = cv2.sumElems(edge2) if sum1 > sum2 : edge = edge1 - edge2 else : edge = edge2 - edge1 #st = cv2.getStructuringElement( cv2.MORPH_RECT , (2,2) ) #edge = cv2.morphologyEx( edge , cv2.MORPH_OPEN , st ) #edge = cv2.morphologyEx( edge , cv2.MORPH_CLOSE , st ) #edge = cv2.threshold(edge,40,1,cv2.THRESH_BINARY) #cv2.imshow('DoG',edge) #img = cv2.cvtColor(img,cv.CV_Lab2RGB) #edges = cv2.cvtColor(edge,cv.CV_GRAY2RGB) for i in xrange(height) : for j in xrange(width) : if edge[i,j] > 40 : img[i,j,:] = img[i,j,:]*0.8 cv2.imshow('Bialter Filter',imgSmooth) cv2.imshow('DoG',edge) #img = cv2.cvtColor(img,cv.CV_Lab2RGB) cv2.imshow('Result',img) cv2.waitKey(0) basename = os.path.basename(filename) cv2.imwrite(basename+'_toCartoon.jpg',img)