Remove the background from an image with this Linux command

The power of Python makes image editing easy on Linux.
7 readers like this.
Painting art on a computer screen

Opensource.com

You have a great picture of yourself and want to use it for your social media profile, but the background is distracting. Another picture has a perfect background for your profile picture. How do you combine the two? Some smartphone apps that do this kind of photo manipulation but are too expensive or are riddled with ad-ware. And they aren't open source. Rembg is up to the challenge!

Rembg is written in Python, so install Python 3 on your computer. Most Linux distributions include Python 3 by default. You can check your version with this simple command:

$ python3 --version

Rembg requires at least Python 3.7 and no greater than Python 3.11. In my case, I have Python 3.10.6 installed.

Install Rembg on Linux

I created a directory called PythonCoding on my Linux laptop and then made a Python virtual environment:

$ python3 -m venv /home/don/PythonCoding

Next, I installed rembg using pip:

$ python3 -m pip install rembg

Combine images

Time to work some magic. First, I chose the image containing a picture taken at All Things Open in 2019.

Don Watkins at All Things Open conference

(Don Watkins, CC BY-SA 4.0)

I ran the following rembg command to rename it with a shorter filename for convenience:

$ rembg i dgw_ato.jpeg dgw_noback.jpg

The first time you run rembg, it downloads an open source pattern recognition model. This can be over 100 MB and rembg saves it in your user directory as ~/.u2net/u2net.onnx. The model is the U-2-Net and uses the Apache 2.0 license. For more information about the pattern recognition models (including how to train your own), read the Rembg documentation.

It created my new photo without the background in about ten seconds. I have a Ryzen 7 with 16 GB of RAM. Your experience may vary depending on your hardware.

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

(Don Watkins, CC BY-SA 4.0)

I have used GIMP to remove backgrounds in the past, but rembg does it quicker and more completely than I have experienced with GIMP.

That's all there is to removing a background. What about adding a new one?

Add a new background

Next, I want to add a new background to the picture. There are different ways to do that. You can, for instance, combine images with ImageMagick, but getting the frame size right can be complex. The easiest way is to use GIMP or Krita.

I used GIMP. First, open the newly created image (ato_image.jpg in my case). Now go to the File menu and select Open as layers. Choose a different image for the background. This image opens as an overlay above the existing photo.

I wanted to move the new background below my portrait. On the right of the GIMP window are two thumbnails, one for each image layer. The background layer is on top. I dragged the background layer beneath my portrait image, and here's the result:

Don Watkins with a new background.

(Don Watkins, CC BY-SA 4.0)

That's a much nicer setting for my profile picture!

Try Rembg

Rembg has three subcommands you can review in the --help menu:

$ rembg --help

They are:

  • rembg i for files
  • rembg p for folders
  • rembg s for HTTP server

Rembg is released with an MIT license. Try it the next time you need a background removed from an image.

User profile image.
Educator, entrepreneur, open source advocate, life long learner, Python teacher. M.A. in Educational Psychology, M.S. Ed. in Educational Leadership, Linux system administrator.

3 Comments

Thanks for the write up on this utility. I'd love to try it but unfortunately it appears it has a python restriction that all of my modern systems fall outside of the bounds of what it expects.

python: >3.7, <3.11

That works amazingly well. Thanks for sharing.

It seems like a really cool and useful tool. I will try this one later.
Thanks for sharing! 👍

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.