paddlehub和removebg 两个库抠图对比,使用PIL更换背景,同时使用tkinter库进行图形化界面创建
整个过程中遇到了很多问题,再网上大神们文档指导下,谢了两个种抠图代码。再次非常感谢。
1.左图用的是removebg ,右图使用的是paddlehub。结果看removebg 要好些,但免费次数50次,paddlehub是免费的。
2.作为一个初学者,也算是最简单写项目,用的第三方包,类,函数,循环,字符串,数组,字典,后面图形化用到异常try.可以当成入门第一个小程序联系。
3.昨晚尝试用PyInstaller,生产exe文件生成后。一直无法打开,排查失败原因是,打包时一些库无法miss.例如select win32api 等。最后以失败告终。
4.调试代码中各种报错,报错原因基础不牢靠,路径path理解不够深刻。
以下是removebg,抠图修改背景代码:
代码如下:
# -*- coding: utf-8 -*-
import os
from removebg import RemoveBg
from PIL import Image
import time
class ChangePic():
#初始化定义removebg API秘钥。path图片的位置
def __init__(self,key,path):
self.key=key
self.path=path
#抠图主函数
def remove(self):
rmove = RemoveBg(self.key, 'error.log')
print(self.path)
for pic in os.listdir(self.path):
img_path=os.path.join(self.path,pic)
rmove.remove_background_from_img_file(img_path)
print(f'{img_path} is done')
#('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个,服务器把这个当成了DDOS攻击。
time.sleep(0.5)
#TypeError: changeBack() takes 1 positional argument but 2 were given,
# 主要原因是,在类调用类内部函数时,会自动传入self参数;举个例子如果函数中不写self,那么参数只有x,但是在函数调用是传入参数是(self,x)两个参数,所以函数就会报错。
def changeBack(self,colar):
color_dict = {
'A': (255, 0, 0), 'B': (67, 142, 219), 'C': (255, 255, 255)}
for pic in os.listdir(self.path):
img_path = os.path.join(self.path, pic)
# ValueError: bad transparency mask Image.open("images/mao.jpg").convert("RGBA")
print(img_path)
img1 = Image.open(img_path).convert("RGBA")
x, y = img1.size
try:
p = Image.new('RGBA', img1.size, color=color_dict.get(colar)