使用这个 Linux 命令从图像中移除背景

Python 的强大功能使图像编辑在 Linux 上变得容易。
7 位读者喜欢这篇文章。
Painting art on a computer screen

Opensource.com

你有一张很棒的自拍照,想用它作为你的社交媒体头像,但背景太分散注意力。另一张照片有一个完美的背景适合你的头像。你如何将两者结合起来?有些智能手机应用程序可以进行这种照片处理,但价格昂贵或充斥着广告软件。而且它们不是开源的。Rembg 可以胜任这项挑战!

Rembg 是用 Python 编写的,因此请在您的计算机上安装 Python 3。大多数 Linux 发行版默认包含 Python 3。您可以使用这个简单的命令检查您的版本

$ python3 --version

Rembg 至少需要 Python 3.7,但不高于 Python 3.11。在我的情况下,我安装了 Python 3.10.6。

在 Linux 上安装 Rembg

我在我的 Linux 笔记本电脑上创建了一个名为 PythonCoding 的目录,然后创建了一个 Python 虚拟环境

$ python3 -m venv /home/don/PythonCoding

接下来,我使用 pip 安装了 rembg

$ python3 -m pip install rembg

合并图像

是时候展示一些魔法了。首先,我选择了一张包含 2019 年在 All Things Open 拍摄的照片的图像。

Don Watkins at All Things Open conference

(Don Watkins, CC BY-SA 4.0)

我运行了以下 rembg 命令,为了方便起见,将其重命名为更短的文件名

$ rembg i dgw_ato.jpeg dgw_noback.jpg

首次运行 rembg 时,它会下载一个开源的 模式识别模型。这可能超过 100 MB,rembg 会将其保存在您的用户目录中,路径为 ~/.u2net/u2net.onnx。该模型是 U-2-Net,并使用 Apache 2.0 许可证。有关模式识别模型的更多信息(包括如何训练您自己的模型),请阅读 Rembg 文档。

它在大约十秒钟内创建了我的新照片,移除了背景。我有一台配备 16 GB 内存的 Ryzen 7。您的体验可能会因您的硬件而异。

A processed image of Don Watkins, with the background removed by Rembg.

(Don Watkins, CC BY-SA 4.0)

过去我曾使用 GIMP 来移除背景,但 rembg 比我使用 GIMP 的体验更快更彻底。

这就是移除背景的全部内容。那么添加新背景呢?

添加新背景

接下来,我想为图片添加一个新背景。有很多不同的方法可以做到这一点。例如,您可以使用 ImageMagick 合并图像,但要获得正确的帧大小可能会很复杂。最简单的方法是使用 GIMP 或 Krita

我使用了 GIMP。首先,打开新创建的图像(在我的例子中是 ato_image.jpg)。现在转到 文件 菜单并选择 作为图层打开。选择另一张图像作为背景。此图像将作为叠加层在现有照片之上打开。

我想将新背景移动到我的肖像下方。在 GIMP 窗口的右侧是两个缩略图,每个图像图层一个。背景图层在顶部。我将背景图层拖到我的肖像图像下方,这就是结果

Don Watkins with a new background.

(Don Watkins, CC BY-SA 4.0)

这对于我的头像来说是一个更好的设置!

试试 Rembg

Rembg 有三个子命令,您可以在 --help 菜单中查看

$ rembg --help

它们是

  • rembg i 用于文件
  • rembg p 用于文件夹
  • rembg s 用于 HTTP 服务器

Rembg 以 MIT 许可证发布。下次您需要从图像中移除背景时,请尝试一下。

User profile image.
教育家、企业家、开源倡导者、终身学习者、Python 教师。教育心理学硕士,教育领导学硕士,Linux 系统管理员。

3 条评论

感谢您撰写关于此实用程序的文章。我很想尝试一下,但不幸的是,它似乎有一个 python 限制,我的所有现代系统都超出了它的预期范围。

python: >3.7, <3.11

这效果非常好。谢谢分享。

这似乎是一个非常酷且有用的工具。我稍后会尝试一下。
谢谢分享!👍

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.