我正在尝试通过编程的方式去除几张图片的白色背景并使其透明。这些图片的格式很简单,有一个白色背景和一个主要位于中心位置的对象。
我想复制https://remove.bg网站的功能,使图像的背景变成透明。
我已经尝试使用
我在
运行命令后,图像确实变成了透明的,但是主要对象内部的几个像素也受到了影响。
输入图像
我想复制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中找到正确的解决方案。
-transparent
影响图像中的所有像素,甚至包括冰淇淋内部。相反,使用从左上角开始并在遇到非白色像素时停止的泛洪填充,这样它只会影响与左上角相连的其他白色像素...convert dessert.png -fill none -fuzz 2% -draw 'alpha 0,0 floodfill' result.png
你可能需要将magick
更改为convert
和/或将alpha
更改为matte
。 - Mark Setchell