Abh*_*ogi 3 python opencv image image-processing node.js
我正在尝试以编程方式删除少数图像的白色背景并使其透明。图像的格式很简单,它具有白色背景和主要位于中间的单个对象。
我想复制https://remove.bg网站的功能,使图像背景透明。
我尝试过使用sharp或imageMagick软件使背景透明。但它也使主对象内的一些像素变得透明。这是我绝对不想要的。
正在使用下面的代码imageMagik将白色背景转换为透明
convert brownie.jpg -transparent white brownie.png
convert cakebig.jpg -fuzz 1% -transparent white cakebig.png
似乎工作不完美。
运行命令后,图像确实变得透明,但主对象内的少数像素也受到影响。
输入图像

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

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

这似乎是一个图像处理问题,似乎OpenCV是最好的解决方案。我对图书馆不太了解,所以有点棘手。正在检查一些代码并发现grab cut可graph cut用于图像分割的算法。但我对此并不完全确定。请帮助在 OpenCV 中找到正确的解决方案。
我将在 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)
您需要下载结果才能看到背景是透明的并且轮廓是平滑的。