Tkinter抠图软件源代码

电脑技术 电脑技术 1408 人阅读 | 1 人回复 | 2022-04-11

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

回答|共 1 个

willsonlincake 发表于 2022-4-11 12:10:59| 字数 2,409 | 显示全部楼层

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

  5. from sys import argv,exit
  6. import interior_removal as ir
  7. import region_shrinking as rs
  8. try:
  9.         from PIL import Image
  10. except:
  11.         print "PIL not installed. Install it before proceeding"
  12. import os
  13. import itertools

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

  17. la=7
  18. plus=3

  19. def toSuspect(img,omg):
  20.         img_LA=img.convert('RGBA').convert('LA')
  21.         removeObject(img_LA,omg)
  22.         omg_LA=omg.convert('LA')
  23.         bg=getbgColor(img_LA)
  24.         X,Y=img.size
  25.         count,count2=0,0
  26.         pixels=omg.load()
  27.         pixel1=omg_LA.load()
  28.         for x,y in itertools.product(range(X),range(Y)):
  29.                 if pixels[x,y][-1]==0:
  30.                         continue
  31.                 if bg==(la*int((pixel1[x,y][0]+plus)/la)):
  32.                         count+=1
  33.                 count2+=1
  34.         if count>(count2/200):
  35.                 return True
  36.         return False
  37.                
  38. def removeObject(img,omg):
  39.         pixels=img.load()
  40.         pixels2=omg.load()
  41.         X,Y=img.size
  42.         for x,y in itertools.product(range(X),range(Y)):
  43.                 if pixels2[x,y][-1]>0:
  44.                         pixels[x,y]=(0,0)

  45. def getbgColor(img):
  46.         pixels=img.load()
  47.         X,Y=img.size
  48.         dict2={}
  49.         for x,y in itertools.product(range(X),range(Y)):
  50.                 if pixels[x,y][-1]>0:
  51.                         key=la*int((pixels[x,y][0]+plus)/la)
  52.                         if key not in dict2:
  53.                                 dict2[key]=0
  54.                         dict2[key]+=1
  55.         return max(dict2.items(),key=lambda x:x[1])[0]

  56. def main(in_folder,out_folder):
  57.         if not os.path.exists(out_folder+"/suspect"):
  58.                 os.makedirs(out_folder+"/suspect")
  59.         for dirname,dirnames,filenames in os.walk(in_folder):
  60.                 for image in filenames:
  61.                         imagename=image.split(".")[0]
  62.                         print "Now doing image:",image
  63.                         img=Image.open(dirname+"/"+image)
  64.                         if not os.path.exists(out_folder+"/"+imagename+".png") and not os.path.exists(out_folder+"/suspect/"+imagename+".png"):
  65.                                 #img2=Image.new(mode="RGBA",size=(img.size[0]*2,img.size[1]))
  66.                                 omg,thresc=rs.region_shrink3(img,img.size[0],img.size[1])
  67.                                 #img2.paste(img,(0,0))
  68.                                 #img2.paste(omg,(img.size[0],0))
  69.                                 if toSuspect(img,omg):
  70.                                         print "\tSuspected"
  71.                                         omg.save(out_folder+"/suspect/"+imagename+".png","PNG")
  72.                                 else:
  73.                                         omg.save(out_folder+"/"+imagename+".png","PNG")


  74. if __name__=="__main__":
  75.         try:
  76.                 in_folder=argv[1]
  77.                 out_folder=argv[2]
  78.                 if not os.path.exists(out_folder):
  79.                         os.makedirs(out_folder)
  80.         except:
  81.                 print "Provide the following arguments"
  82.                 print "1. Input folder name"
  83.                 print "2. Output folder name"
  84.                 exit()
  85.         main(in_folder,out_folder)
  86.                
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则