漫画图片

椒盐噪声

漫画去噪声

又写了一个 gui , 只是描框

呵呵,中央七的节目动画就是用的这个技术。

漫画 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)