强劲去除背景,赶紧来试试rembg

图片抠背景

生活中经常存在需要抠除背景的任务,然后不得不去寻找一款得心应手的工具,但大部分都是付费的。

现在学会python,可以免费拥有一款强大的抠除背景工具,它就是rembg

假如你想把帅气的刘德华从背景中抠出来,那么你可以通过rembg得到了下面的图:

使用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
)

未使用post_process_mask
未使用post_process_mask

使用post_process_mask
使用post_process_mask

4.3 掩码图片

如果你想要一张掩码图片,添加only_mask参数即可:

output_image = remove(
    input_image,
    session=MySession(),
    only_mask=True
)

掩码图
掩码图

结尾

remgb 还有很多参数没有介绍,如果你喜欢这个库,上方的参数即是工作中常用的参数,剩下的很多是用于微调。

感谢你的阅读,如果觉得不错,点个赞支持一下吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python卡皮巴拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值