Iazel
Iazel

Reputation: 2336

Image background removal algorithms

I've lots of images with a white background and I need to remove it (make it transparent). I've already tried imagemagick convert and for some image that worked quite well, but still cannot be used on dark background.
I'm kind a noob in this branch of programming... Someone know some good algorithms to remove the background?

Plus, would be great if it could correctly process an image like this:
http://dev.addvert.it/cache/24eeab00e5987452d09fbeec0c7678d6_w472_h472_sc.jpg

The problem with convert diff is it erase a lot of the image, while the border algo doesn't touch the central part.
I totally understand how hard is for a calculator to do something like this and I'm pretty amazed with the results of convert, but if there's the chance of a better solution, why not ask? :D

Upvotes: 1

Views: 3226

Answers (1)

Mark Setchell
Mark Setchell

Reputation: 207678

You are not constrained to converting white pixels to transparent. You could maybe take the colour of the top-left corner pixel and make all pixels that colour transparent and it will work for black backgrounds too:

As suggested by @emcconville, the first of the following two options is more succinct:

convert towel.jpg -fill none -fuzz 2% -draw 'matte 0,0 replace' output.png

or, per my original,

convert towel.jpg -alpha on -fill none -fuzz 5% -draw 'color 0,0 replace' output.png

enter image description here

You may find this more readable...

convert towel.jpg -fuzz 5%                                           \
   -transparent $(convert towel.jpg -format "%[pixel:p{0,0}]" info:) \
   output.png

In the second line, $(convert ...) just gets the colour of the top-left pixel and feeds that into the middle of the outer convert command as the colour to make transparent - but it is only doing the same thing as the first version.

Upvotes: 2

Related Questions