当前位置: 首页 > news >正文

Python批量设置图片背景为透明

我们日常生活中制作PPT等教学资源时,需要批量去除图片背景,就可以使用 Python 的 rembg 库。

这个库基于神经网络模型,去背景效果较好,可以批量处理png, jpg, jpeg等图片。采用以下代码可以批量处理当前目录下的所有图片,去除背景后并保存为透明背景的图像存在output当中。

一、安装rembg库

不过,使用前需要在cmd下或者pycharm, thonny等pyhon的idle调试工具中安装一下这个rembg库,安装代码:

pip install rembg

二、下载u2net.onnx机器学习模型

安装完成rembg模块后,第一次运行程序,调用这个模块,还需要安装机器学习模型:u2net.onnx,大小为176M,程序会自动下载,全程不需要干涉。

下载机器学习模型

这个模型文件 (u2net.onnx) 是经过训练的深度学习模型,包含了用于识别并分离前景和背景的算法权重。rembg 库使用 U2-Net 来执行背景去除的任务。第一次使用 rembg 时,库会自动下载这个模型文件,以确保能够正确运行背景去除功能。

具体来说:模型文件 u2net.onnx:U2-Net 模型是一个开源的图像分割模型,专门用于前景-背景分离。rembg 使用这个模型的 .onnx 文件格式,方便兼容各种框架。

由于rembg 没有默认包含该模型文件,因此在第一次运行时需要下载并存储在本地(C:\Users\用户名\.u2net\u2net.onnx),下载完成后,模型文件会保存在你用户目录的 .u2net 文件夹中,后续运行 rembg 就不需要重新下载。

三、编写清除图片背景代码

下载完成后,程序会自动运行清除背景的程序,如下面的程序,批量把当前目录下的图片文件,移除背景,设置透明背景后存在output文件夹下面,全程操作非常的快。

import os
from rembg import remove
from PIL import Image# 定义输入和输出文件夹
input_folder = '.'  # 当前目录
output_folder = './output/'  # 输出文件夹# 创建输出文件夹(如果不存在)
# if not os.path.exists(output_folder):
os.makedirs(output_folder,exist_ok=True)# 遍历当前目录的所有文件
for filename in os.listdir(input_folder):# 检查是否为图像文件(可以添加更多格式)if filename.lower().endswith(('.png', '.jpg', '.jpeg')):input_path = os.path.join(input_folder, filename)output_path = os.path.join(output_folder, filename.split('.')[0] + '_no_bg.png')# 打开图像并去除背景with open(input_path, 'rb') as input_file:input_image = input_file.read()output_image = remove(input_image)# 将结果保存为 PNG 格式with open(output_path, 'wb') as output_file:output_file.write(output_image)print("图片背景已去除并保存到 'output' 文件夹。")

input_folder 指定输入文件夹,这里设为当前目录 ./。

output_folder 是输出文件夹(去除背景后的图片保存位置),如果不存在,则会自动创建。

脚本遍历当前目录中的所有图像文件(.png, .jpg, .jpeg),去除背景后以透明背景 PNG 格式保存到 output 文件夹中。

四、效果对比

以下是清除背景前后的效果对比,怎么样,还算不错吧?

清除背景前:

清除背景后:

五、学后总结

Python像瑞士军刀一样,几乎无所不能,尤其是在办公自动化、批量处理上更是有先天的优势。更为重要的是学习生态也很好,大语言模型背后很多时候就是在用python来操作,所以从现在起立一个小小的flag,学起来,天长日久,必有所获。

http://www.lryc.cn/news/481659.html

相关文章:

  • Vue CLI 脚手架
  • Linux【基础篇】
  • 多线程环境下安全地使用 SimpleDateFormat的常见方法
  • easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头
  • ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习
  • Docker 常用命令详解(详细版)
  • 【网络安全 | 甲方安全建设】分布式系统、Redis分布式锁及Redisson看门狗机制
  • 「QT」几何数据类 之 QLineF 浮点型直线类
  • Treeland 技术揭秘,如何使得 DDE 纵享丝滑?
  • 快速了解SpringBoot 统一功能处理
  • C++区分数组的引用和引用的数组
  • 【harbor】离线安装2.9.0-arm64架构服务制作和升级部署
  • ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决
  • uniApp之uni-file-picker使用踩坑
  • 【C语言】。末尼
  • 【鉴权】深入解析 Token:身份认证的核心技术
  • FastReport将停止 .NET Framework 上的 WebReport 更新
  • 面试:TCP、UDP如何解决丢包问题
  • 在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码
  • HTTPS通信和TCP通信有什么不一样
  • Kafka 的一些问题,夺命15连问
  • unity3d————延时函数
  • 计算机学生自我提升方法——善用搜索引擎
  • 游戏引擎学习第一天
  • uni-app view循环绑定click和 v-if
  • Redis 高并发分布式锁实战
  • 关于elementui el-radio 赋值问题
  • 2024-11-6----Android 11(全志713m)----- 关于添加 Selinux 权限
  • shodan5(泷羽sec)
  • 【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本