如何删除图像的白色背景并使之透明?

时间:2019-09-11 09:27:34

标签: python node.js image opencv image-processing

我正在尝试以编程方式删除一些图像的白色背景并使之透明。图像的格式很简单,它具有白色背景和一个主要位于中间的对象。

我想复制https://remove.bg网站的功能,该功能可使图像的背景透明。

我尝试使用sharpimageMagick软件使背景透明。但这也使主要对象内的某些像素也变得透明。我绝对不想要。

使用imageMagik中的以下代码将白色背景转换为透明背景

convert brownie.jpg -transparent white brownie.png

convert cakebig.jpg -fuzz 1% -transparent white cakebig.png

似乎工作不完美。

运行命令后,图像确实变得透明,但主要对象内的像素也很少受到影响。

输入图像 Input

ImageMagik的输出(查看主对象内的某些像素如何变得透明) Image magik

https://remove.bg的预期输出(看不到主要对象) Expected Output

这似乎是图像处理问题,OpenCV似乎是最好的解决方案。我对图书馆了解不多,所以有点棘手。正在检查一些代码,并遇到了grab cutgraph cut算法,这些算法可用于图像分割。但是我对此不太确定。请在OpenCV中帮助您找到适当的解决方案。

1 个答案:

答案 0 :(得分:3)

我将为Mark Setchell出色的ImageMagick回答提供更多有关使用模糊泛光填充的信息,方法是通过稍微模糊alpha通道,然后将模糊值清零到中间灰度以下来添加一些抗锯齿。这将平滑模糊泛洪填充留下的锯齿状边缘。请注意,模糊值太大会导致冰淇淋泄漏,因为冰淇淋的颜色与背景颜色相似。模糊值太小将无法充分消除背景。因此,此图像中的模糊值公差很严格。

输入:

enter image description here

对于ImageMagick 6:

convert img.png -fuzz 2% -fill none -draw "matte 0,0 floodfill" -channel alpha -blur 0x2 -level 50x100% +channel result.png


对于Imagemagick 7:

magick img.png -fuzz 2% -fill none -draw "alpha 0,0 floodfill" -channel alpha -blur 0x2 -level 50x100% +channel result.png


enter image description here

您需要下载结果以确保背景透明且轮廓光滑。