如何去除图像的白色背景并使其透明?

Abh*_*ogi 3 python opencv image image-processing node.js

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

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

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

正在使用下面的代码imageMagik将白色背景转换为透明

convert brownie.jpg -transparent white brownie.png

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

似乎工作不完美。

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

输入图像 输入

ImageMagik 的输出(查看主对象内的一些像素如何变得透明) 图像魔术师

https://remove.bg的预期输出(看不到对主对象的影响) 预期输出

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

fmw*_*w42 5

我将在 Mark Setchell 关于使用模糊洪水填充的优秀 ImageMagick 答案中添加一些内容,方法是通过稍微模糊 alpha 通道,然后将模糊值归零到中灰色以下来添加一些抗锯齿功能。这将平滑模糊洪水填充留下的锯齿状边缘。请注意,太大的模糊值会导致泄漏到冰淇淋中,因为冰淇淋的颜色与背景的颜色相似。模糊值太小将无法充分去除背景。因此该图像中的模糊值容差很严格。

输入:

在此输入图像描述

对于 ImageMagick 6:

convert img.png -fuzz 2% -fill none -draw "matte 0,0 floodfill" -channel alpha -blur 0x2 -level 50x100% +channel result.png
Run Code Online (Sandbox Code Playgroud)


对于 Imagemagick 7:

magick img.png -fuzz 2% -fill none -draw "alpha 0,0 floodfill" -channel alpha -blur 0x2 -level 50x100% +channel result.png
Run Code Online (Sandbox Code Playgroud)


在此输入图像描述

您需要下载结果才能看到背景是透明的并且轮廓是平滑的。