我正在尝试以编程方式删除少数图像的白色背景并使其透明。图像的格式很简单,它有一个白色的背景和一个主要位于中间的对象。
我想复制 https://remove.bg 的功能使图像背景透明的网站。
我曾尝试使用sharp
或imageMagick
软件使背景透明。但它使主要对象内的一些像素也变得透明。我绝对不想要。
在 imageMagik
中使用以下代码将白色背景转换为透明
转换 brownie.jpg -transparent white brownie.png
转换cakebig.jpg -fuzz 1% -transparent white cakebig.png
似乎效果不佳。
运行命令后,图像确实变得透明,但主要对象内的像素也很少受到影响。
输入图像
ImageMagik 的输出(查看主要对象中的一些像素如何变得透明)
https://remove.bg 的预期输出(看对主体没有影响)
这似乎是一个图像处理问题,OpenCV
似乎是解决此问题的最佳方案。我对图书馆了解不多,所以有点棘手。在查看一些代码时遇到了可用于图像分割的grab cut
和graph cut
算法。但我对此并不完全确定。请帮助在 OpenCV 中找到正确的解决方案。
最佳答案
我将通过稍微模糊 alpha channel 添加一些抗锯齿来添加一些抗锯齿,然后将模糊值归零到中灰色以下,从而为 Mark Setchell 关于使用模糊泛光填充的出色 ImageMagick 回答添加更多信息。这将使模糊填充留下的锯齿状边缘变得平滑。请注意,模糊值太大会导致冰淇淋渗漏,因为冰淇淋的颜色与背景颜色相似。模糊值太小将无法充分去除背景。因此,此图像中的模糊值容差很严格。
输入:
对于 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
您需要下载结果才能看到背景是透明的,轮廓是平滑的。
关于python - 如何去除图像的白色背景并使其透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57886049/