批量去除图片的背景

325 阅读1分钟

我正在参加「掘金·启航计划」

安装 pip install backgroundremover

python 环境使用

import os  
os.system('backgroundremover -i "in.png" -o "out.png"')

或者 shell 执行

backgroundremover -i " in.jpeg " -o " output.png "

如果没有科学上网,需要下载预训练包,下载地址: github.com/OPHoperHPO/…

然后放到合适的位置,比如  /Users/myname/.u2net/

但是,这个只能去除一张照片,现在写个 shell 脚本,以便批量处理:

#!/bin/bash
find ./归档  -name "*.JPG" > in.txt
find ./归档  -name "*.JPG" | awk -vb=./归档_结果/  -F '[ /]'  '{jpgOut=b$3;print jpgOut}'  > out.txt 
exec 3<"in.txt"
exec 4<"out.txt"
while read line1<&3 && read line2<&4
do  
    echo $line1 $line2
    backgroundremover -i $line1 -o $line2
done 

假设我现在需要批量处理的图片的路径是 /Users/Downloads/tmp/归档

那么 cd 到 /Users/Downloads/tmp,然后:

1.新建文件夹

makir 归档_结果

现在生成了一个空目录 /Users/Downloads/tmp/归档_结果,生成的图片将保存在这里面

2.新建脚本

vim doit.sh

打开脚本后输入以下内容

#!/bin/bash
find ./归档  -name "*.JPG" > in.txt
find ./归档  -name "*.JPG" | awk -vb=./归档_结果/  -F '[ /]'  '{jpgOut=b$3;print jpgOut}'  > out.txt 
exec 3<"in.txt"
exec 4<"out.txt"
while read line1<&3 && read line2<&4
do  
    echo $line1 $line2
    backgroundremover -i $line1 -o $line2
done 

保存退出后执行:

sh doit.sh

image.png

成功。

当然,也可以使用诸如 removebg 之类的工具(www.remove.bg/zh), 如果要使用的话,参考代码

# -*- coding: utf-8 -*-
""" @ auth : carl_DJ @ time : 2020-8-12 """
from removebg import RemoveBg
'''去除一张图片'''
#这里需要的是 removebg网站上的秘钥,如果错误,则输出到log文件中
rmbg = RemoveBg('输入removebg上的秘钥','rmgb_error.log')
#图片的地址
pict_path ='../image/remobg'
#执行去图片背景操作
rmbg.remove_background_from_img_file(f"{pict_path}/my_pict.jgp")

——来自 pythonmana.com/2021/08/202… 但是并不能免费无限批量使用,所以还是选择上面的办法吧。