漫画 gui

# !/usr/bin/python
# coding : cp936
# CopyRight 2012 Adou , All Rights Reserved .

import cv , cv2
import math
import os
import sys
from Tkinter import *
import Tkinter
from PIL import Image , ImageTk

global ksize1 , ksize2 , sigma , edge , imglabel

#ksize1 = IntVar()
#sigma = DoubleVar()
#filename = StringVar()
#sigma = DoubleVar()
    
def odd( num ) :
    num = int( num )
    if num/2*2 == num :
        num -= 1
    return num

def oddf( num ) :
    ksize1.set( odd(ksize1.get()) )
    ksize2.set( odd(ksize2.get()) )

def filter():
    ''''''
    global filename , ksize1 , ksize2 , sigma , edge , imglabel , tkedge

    if not os.path.isfile(filename.get()) :
        print 'no such file'
        return
    else :
        print filename.get()
    img = cv2.imread(filename.get())
    #height , width , dim = img.shape

    #img = cv2.bilateralFilter(img,10,20,5)  # 1

    img = cv2.bilateralFilter(img,4,8,2)  # 6
    img = cv2.bilateralFilter(img,4,8,2)  # 6
    img = cv2.bilateralFilter(img,4,8,2)  # 6
    img = cv2.bilateralFilter(img,4,8,2)  # 6
    img = cv2.bilateralFilter(img,4,8,2)  # 6

    imgray = cv2.cvtColor(img,cv.CV_RGB2GRAY)

    #sizeq = min(width,height)
    #sizeq = height
    sizeq = int( img.size**0.5*0.8 )
    edge1 = cv2.GaussianBlur(imgray,(ksize1.get(),ksize1.get()),sigma.get())
    edge2 = cv2.GaussianBlur(imgray,(ksize2.get(),ksize2.get()),sigma.get())
    sum1 = cv2.sumElems(edge1)
    sum2 = cv2.sumElems(edge2)
    if sum1 > sum2 :
        edge = edge1 - edge2
    else :
        edge = edge2 - edge1

    edge = 255 - edge
    cv2.imshow('Img2Cartoon',edge)
    #piedge = Image.fromstring('L',edge.shape,edge.tostring())
    #piedge = Image.fromarray(edge)
    #print piedge
    #tkedge = ImageTk.PhotoImage( piedge )
    #print tkedge
    #imglabel['image'] = tkedge

    #edge = cv2.bilateralFilter(edge,10,20,5)

    #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)
    
    #basename = os.path.basename(filename)
    #cv2.imwrite('after/'+basename,edge)

def savef() :
    global edge , filename 
    cv2.imwrite('cartoon_'+filename.get(),edge)

if __name__ == '__main__' :
    '''test'''
    global filename , ksize1 , ksize2 , sigma , imglabel

    root = Tk()
    root.title('Img2Cartoon')
    #root.geometry('640x480+100+160')

    ###############################################
    label1 = Label(root,text='ksize1',width=16)
    label1.grid(row=0,column=0)

    ksize1 = IntVar()
    scale1 = Scale(root,from_=1,to=17,resolution=1,variable=ksize1,orient=HORIZONTAL,length=360,command=oddf)
    ksize1.set(3)
    scale1.grid(row=0,column=1)

    filename = StringVar()
    entry = Entry(root,text='1.jpg',textvariable=filename)
    filename.set('1.jpg')
    entry.grid(row=0,column=2)

    ###############################################
    label2 = Label(root,text='ksize2',width=16)
    label2.grid(row=1,column=0)

    ksize2 = IntVar()
    scale2 = Scale(root,from_=1,to=17,resolution=1,variable=ksize2,orient=HORIZONTAL,length=360,command=oddf)
    ksize2.set(5)
    scale2.grid(row=1,column=1)

    btn1 = Button(root,text='process',command=filter,width=16)
    btn1.grid(row=1,column=2)

    ###############################################
    label3 = Label(root,text='ksize3',width=16)
    label3.grid(row=2,column=0)

    sigma = DoubleVar()
    scale3 = Scale(root,from_=0.1,to=4.0,resolution=0.1,variable=sigma,orient=HORIZONTAL,length=360)
    sigma.set(1.8)
    scale3.grid(row=2,column=1)

    btn2 = Button(root,text='save',command=savef,width=16)
    btn2.grid(row=2,column=2)

    ###############################################
    imglabel = Label(root,bd=0)
    imglabel.grid(row=3,column=0,columnspan=3)

    root.mainloop()