一、简要介绍
相信各位小伙伴从小到大都拍过不少证件照吧,证件照通常有不同的背景颜色,有红色,蓝色,白色等。那么除了在拍摄时选择不同的颜色背景外,使用python进行照片换底也是一种不错的选择。
实现证件照换底,原理无非就是把照片的背景和前景进行分割,然后生成一个新的背景,再与原来的前景结合,就得到了新的图片。而图像分割的准确性就决定了图像处理的效果。
我是使用了python的rembg这个软件包,rembg是一个用于从图像中去除背景的 Python 软件包。它利用深度学习模型来实现背景移除的功能,适用于各种图像处理场景。以下是rembg的一些关键特点:
-
简易使用:
rembg
提供了简单的命令行接口和 Python API,用户可以方便地在代码中调用它来处理图像。 -
高效性:它采用了先进的深度学习模型,可以快速且准确地分离图像中的前景和背景。
-
支持多种图像格式:
rembg
支持多种常见的图像格式,包括 PNG、JPEG 等。 -
无依赖性:在使用时,
rembg
不需要其他复杂的图像处理库或工具,安装和配置都比较
二、代码实现
首先我们需要先安装软件包(同时还需要pillow这个软件包)
pip install rembg
安装完成之后通过如下代码实现照片换底:
from rembg import remove
from PIL import Image
# 输入和输出路径
in_path = "red.jpg"
out_path = "out2.png"
# 要替换的背景颜色
color_name = "blue"
# 转换颜色名称为 RGB
color_dict = {
"red": (255, 0, 0),
"blue": (0, 0, 255),
"black": (0, 0, 0),
"white": (255, 255, 255)
}
color = color_dict.get(color_name, (255, 255, 255)) # 默认为白色
# 去掉背景颜色
input_image=Image.open(in_path)
output_image=remove(input_image)
# 加上背景颜色
no_bg_image = output_image.convert("RGBA")
# 创建新图像
new_image = Image.new('RGBA', no_bg_image.size, color=color + (255,)) # 添加透明度
# 贴上去掉背景后的图像
new_image.paste(no_bg_image, (0, 0), no_bg_image) # 使用 alpha 通道作为掩码
# 保存最终图像
new_image.save(out_path)
print(f"Image saved as '{out_path}'")
如果在pycharm里面直接运行这行代码,它会显示这么一段内容
Downloading data from 'https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net.onnx' to file 'C:\Users\HONOR\.u2net\u2net.onnx'
表示正在从GitHub上的开源地址下载数据,下载的较慢。我是选择在浏览器的这个地址直接下载,然后保存到对应的文件夹。
三、效果展示
原图1
换为红底
原图2
换为蓝底
初次之外,我们还可以用这段代码来抠图,将人像和不同的背景结合起来, 是非常好玩和有趣的。
好了,这次的内容就分享到这里了,资源我放在下面的链接里了,里面包含了源代码和各种测试用例,可以免费下载哦,觉得有用的话,希望大家点一点下载,支持一下。