漫画图片
椒盐噪声
又写了一个 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)