图片抠背景
生活中经常存在需要抠除背景的任务,然后不得不去寻找一款得心应手的工具,但大部分都是付费的。
现在学会python,可以免费拥有一款强大的抠除背景工具,它就是rembg。
假如你想把帅气的刘德华从背景中抠出来,那么你可以通过rembg得到了下面的图:

使用教程
1. 安装相关库
pip install pillow
pip install rembg
pip install onnxruntime
pillow 安装不是必选项,可以不安装。
2. 调用代码
# -*- coding: utf-8 -*-
from rembg import remove
from PIL import Image
if __name__ == '__main__':
input_path = 'task.jpg'
output_path = 'output.png'
input_image = Image.open(input_path)
output_image = remove(input_image)
output_image.save(output_path)
是不是非常简单?不过在调用过程中,rembg 将会进行一次模型下载,如果没有梯子会很慢:

本文准备了两个国内网盘链接,方便同学下载:
-
百度网盘 链接: https://pan.baidu.com/s/1py7C0Hc4Dow2OqJg9k1Pgw?pwd=8mph 提取码: 8mph
-
夸克网盘 链接:https://pan.quark.cn/s/850de98b9a68 提取码:RTWT
3. 使用模型
当然,如果有需要我们可以使用自己下载的模型来调用代码,如下:
from rembg import remove
from PIL import Image
from rembg.sessions.u2net import U2netSession
import onnxruntime as ort
import os
classMySession(U2netSession):
def__init__(self, *args, **kwargs):
sess_opts = ort.SessionOptions()
if"OMP_NUM_THREADS"in os.environ:
sess_opts.inter_op_num_threads = int(os.environ["OMP_NUM_THREADS"])
sess_opts.intra_op_num_threads = int(os.environ["OMP_NUM_THREADS"])
new_args = ('u2net', sess_opts,)
super().__init__(*new_args, **kwargs)
@classmethod
defu2net_home(cls, *args, **kwargs):
return''# 模型和脚本在一个目录下,如果需要填写相应的模型目录
if __name__ == '__main__':
input_path = 'task.jpg'
output_path = 'output.png'
input_image = Image.open(input_path)
output_image = remove(
input_image,
session=MySession(),
)
output_image.save(output_path)
4. 其他参数
4.1 添加背景色
我们可以使用bgcolor来给抠除的背景替换为我们想要的颜色,例如下面就是改为红色背景的代码:
output_image = remove(
input_image,
session=MySession(),
bgcolor=(255, 0, 0, 255)
)

4.2 平滑背景
可以添加post_process_mask使背景及边缘其更加准确、平滑和干净:
output_image = remove(
input_image,
session=MySession(),
post_process_mask=True
)


4.3 掩码图片
如果你想要一张掩码图片,添加only_mask参数即可:
output_image = remove(
input_image,
session=MySession(),
only_mask=True
)

结尾
remgb 还有很多参数没有介绍,如果你喜欢这个库,上方的参数即是工作中常用的参数,剩下的很多是用于微调。
感谢你的阅读,如果觉得不错,点个赞支持一下吧!