python opencv去图片水印(图片底色为白色)

python opencv去图片水印(图片底色为白色)

Python

# -*- coding: utf-8 -*-
import cv2,os,shutil,datetime,re,time
from threading import Thread
from hashlib import md5
PICHASH= {}
def md5_file(name):
    try:
        m = md5()
        a_file = open(name, 'rb')
        m.update(a_file.read())
        a_file.close()
        return m.hexdigest()
    except:
        return None
def nowater(dir,newdir,dirlist):
    global  PICHASH
    for ppicdir in dirlist:
        print ppicdir
        print os.path.isdir(dir+ppicdir)
        if(os.path.isdir(dir+ppicdir)):
            sortfiles=os.listdir(dir+ppicdir)
            if '.DS_Store' in sortfiles:
                sortfiles.remove('.DS_Store')
            sortfiles.sort()
            for oldfile in sortfiles:
                filetype="."+oldfile.split(".")[len(oldfile.split("."))-1]
                picname_front=oldfile.split(filetype)[0]
                oldfile=dir+ppicdir+"/"+oldfile
                jpgname=picname_front+".jpg"
                jpgname=newdir+ppicdir+"/"+jpgname
                try:
                    oldfile_hash=md5_file(oldfile)
                    oldfile_tmphashvalue=PICHASH.get(oldfile_hash)
                    file_object = open('pichash.txt', 'a')
                    file_object.write(oldfile+":"+oldfile_hash+'\n')
                    file_object.close()
                    if(oldfile_tmphashvalue==None):
                        if not os.path.exists(newdir+ppicdir):
                            os.makedirs(newdir+ppicdir)
                        print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+","+oldfile+",ing\n"
                        img=cv2.imread(oldfile)
                        x,y,z=img.shape
                        if x < 100:
                            print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+","+jpgname+"too small , continue"
                        elif x >5000:
                            print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+","+jpgname+"too big , continue"
                        elif not os.path.exists(jpgname):
                            for i in xrange(x):
                                for j in xrange(y):
                                    varP=img[i,j]
                                    if sum(varP)>250 and sum(varP)<765 :
                                        img[i,j]=[255,255,255]
                            cv2.imwrite(jpgname,img)
                            print "jpgname:"+jpgname
                            PICHASH[oldfile_hash]=oldfile
                            print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+","+oldfile+",done\n"
                        else:
                            print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+","+jpgname+"exists\n"
                    elif(oldfile_tmphashvalue!=None):
                        if(os.path.exists(jpgname)):
                            print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+","+jpgname+"exists\n"
                        else:
                            shutil.copyfile(oldfile_tmphashvalue,oldfile)
                            shutil.copyfile(oldfile,jpgname)
                            print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+","+jpgname+" same with the old, continue"
                except Exception,e:
                    print "Exception:",e
                    continue
if __name__=='__main__':
    dir="./pic/"
    newdir="./picnew/"
    list0=[]
    list1=[]
    list2=[]
    for ppicdir in os.listdir(dir) :
        print ppicdir
        print os.path.isdir(dir+ppicdir)
        if(os.path.isdir(dir+ppicdir)):
                if (re.compile(r'^[0-1].*').match(str(ppicdir))):
                    list0.append(ppicdir)
                elif(re.compile(r'^[2-3].*').match(str(ppicdir))):
                    list1.append(ppicdir)
                elif(re.compile(r'^[4-5].*').match(str(ppicdir))):
                    list2.append(ppicdir)
                else:
                    continue
    Thread(target=nowater,args=(dir,newdir,list0)).start()
    Thread(target=nowater,args=(dir,newdir,list1,)).start()
    Thread(target=nowater,args=(dir,newdir,list2,)).start()

猜你喜欢

转载自blog.csdn.net/xiangliangyu2008/article/details/82585674
今日推荐