willsonlincake 发表于 2022-4-11 12:09:30

Tkinter抠图软件源代码

https://github.com/siddharthm/PyBGremover/blob/master/main.py

willsonlincake 发表于 2022-4-11 12:10:59

# Python program to process a feed file, download all images
# and process them to remove background from them automatically
# and then using a tool to manually remove background from
# suspected images

from sys import argv,exit
import interior_removal as ir
import region_shrinking as rs
try:
        from PIL import Image
except:
        print "PIL not installed. Install it before proceeding"
import os
import itertools

# parameters for setting the color bucket
# la is the size of bucket
# plus is the amt added to color so that the colors near 255 have a filled bucket

la=7
plus=3

def toSuspect(img,omg):
        img_LA=img.convert('RGBA').convert('LA')
        removeObject(img_LA,omg)
        omg_LA=omg.convert('LA')
        bg=getbgColor(img_LA)
        X,Y=img.size
        count,count2=0,0
        pixels=omg.load()
        pixel1=omg_LA.load()
        for x,y in itertools.product(range(X),range(Y)):
                if pixels[-1]==0:
                        continue
                if bg==(la*int((pixel1+plus)/la)):
                        count+=1
                count2+=1
        if count>(count2/200):
                return True
        return False
               
def removeObject(img,omg):
        pixels=img.load()
        pixels2=omg.load()
        X,Y=img.size
        for x,y in itertools.product(range(X),range(Y)):
                if pixels2[-1]>0:
                        pixels=(0,0)

def getbgColor(img):
        pixels=img.load()
        X,Y=img.size
        dict2={}
        for x,y in itertools.product(range(X),range(Y)):
                if pixels[-1]>0:
                        key=la*int((pixels+plus)/la)
                        if key not in dict2:
                                dict2=0
                        dict2+=1
        return max(dict2.items(),key=lambda x:x)

def main(in_folder,out_folder):
        if not os.path.exists(out_folder+"/suspect"):
                os.makedirs(out_folder+"/suspect")
        for dirname,dirnames,filenames in os.walk(in_folder):
                for image in filenames:
                        imagename=image.split(".")
                        print "Now doing image:",image
                        img=Image.open(dirname+"/"+image)
                        if not os.path.exists(out_folder+"/"+imagename+".png") and not os.path.exists(out_folder+"/suspect/"+imagename+".png"):
                                #img2=Image.new(mode="RGBA",size=(img.size*2,img.size))
                                omg,thresc=rs.region_shrink3(img,img.size,img.size)
                                #img2.paste(img,(0,0))
                                #img2.paste(omg,(img.size,0))
                                if toSuspect(img,omg):
                                        print "\tSuspected"
                                        omg.save(out_folder+"/suspect/"+imagename+".png","PNG")
                                else:
                                        omg.save(out_folder+"/"+imagename+".png","PNG")


if __name__=="__main__":
        try:
                in_folder=argv
                out_folder=argv
                if not os.path.exists(out_folder):
                        os.makedirs(out_folder)
        except:
                print "Provide the following arguments"
                print "1. Input folder name"
                print "2. Output folder name"
                exit()
        main(in_folder,out_folder)
               

页: [1]
查看完整版本: Tkinter抠图软件源代码