很多时候,我们需要抠出照片中的人物时,第一想法就是万能PS,用套索抠图。
但是往往会出错,并且让人眼花缭乱。
在这里,给大家演示一番,用python代码来自动抠图。
在这里就不得不介绍一个网站了(remove.bg),绝对的5s级抠图神器。
客户端每月可以免费处理 50 张图片,并且可以通过API上传图片。
还是老样子,先给大家上个图。(图是百度上抠下来的)
抠图前:
抠图后:
不能不说,这效果能够比得上多年ps老司机了!
首先,我们需要获取一个属于自己的API------>点击这里,手把手教你如何获取API
获得API后,还是老样子,我们先用tkinter布局
其实,实现自动抠图只需要三行代码。
我们只不过是使用removebg实现了抠图功能,但真正如何抠图的过程全是由removebg操作的。
from removebg import RemoveBg
rmbg = RemoveBg("此处填写获取的API", "error.log") # 引号内是你获取的API
rmbg.remove_background_from_img_file("此处填写需上传图片的路径") # 图片地址
通过这三行代码,我们可以通过API上传图片,让removebg网站帮我们自动抠图,并保存。
**注:**保存的已抠图图片会保存在所上传图片的目录下
(本来想尝试下改变保存路径的,但一直没找到方法)
# coding=utf-8
from tkinter import *
from tkinter.filedialog import askopenfilenames
import tkinter.filedialog
import tkinter.messagebox
from removebg import RemoveBg
root = Tk()
root.title("去除图中人物背景")
root.geometry("400x500")
root.resizable(0,0)
frame1 = Frame(root)
frame2 = Frame(root)
frame1.pack()
frame2.pack()
read_var = StringVar()
IMGPATH = ""
def get_image():
global IMGPATH
filenames = askopenfilenames(filetypes = (("jpg img","*.jpg"),("pgn img","*.pgn"),("gif img","*.gif")))
if len(filenames) > 0:
fnlist = [fn for fn in filenames]
fnstr = '\n'.join(fnlist)
read_var.set(fnstr)
IMGPATH = fnlist
else:
read_var.set("目前没有选择任何图片文件")
def make_image():
global savepath
global IMGPATH
for imgpath in IMGPATH:
produce_image(imgpath)
tkinter.messagebox.showinfo(title = "OK",message = '完成生成')
def produce_image(img_path):
rmbg = RemoveBg("此处填写获取的API", "error.log")
rmbg.remove_background_from_img_file(img_path)
Label1 = Label(frame1,text = "文件路径:")
Label1.grid(row = 0,column = 0,pady = 20)
Label3 = Label(frame1,textvariable = read_var)
Label3.grid(row = 0,column = 1)
Button1 = Button(frame2,text = "选择文件",command = get_image,font = ("楷体",18))
Button3 = Button(frame2,text = "生成图片",command = make_image,font = ("楷体",18))
Button1.pack(pady = 20)
Button3.pack(pady = 20)
mainloop()
**注:**本代码中API需改为自己所注册的
以上代码均为私人所码,如有疑问,请留言。