使用ImageMagick去除白色背景但不影响图片内部的白色?

5

我正在尝试使用批处理程序删除电子商务网站产品图片的背景。

问题是,该脚本还会删除产品内部的白色颜色,导致某些区域的产品变为透明。

例如:

enter image description here

命令:

convert *.jpg  -set filename: %t -fuzz 5% -transparent white %[filename:].png

这是我能得到的最好结果。我对产品周围的结果感到满意,但我需要确保产品内部的白色保持不透明。

enter image description here

1个回答

2
您当前方法的问题在于它不尊重边界,它只是全局应用,使得所有白色像素透明,无论它们与背景的连通性如何。
相反,您可以使用一个“泛洪填充”算法,仅填充到距离左上角像素模糊距离内的区域。
因此,我选择了一个未使用的洋红色,以便您可以看到发生了什么:
convert product.jpg -fuzz 5% -fill magenta -draw 'color 0,0 floodfill' result.png

enter image description here

然后,您会使用以下命令使品红色透明:
convert product.jpg -fuzz 5% -fill magenta -draw 'color 0,0 floodfill' -transparent magenta result.png

enter image description here


工作得很好,但我有一些产品左侧与右侧没有连接,因此它仍然是白色的...我该如何做到右上角呢?我尝试将0,0修改为200,200或200,0,但不起作用。 - JonTargaryen
@JonTargaryen 你可以在图像周围添加边框,以便填充算法能够完全覆盖。请参考这里 https://dev59.com/vJvga4cB1Zd3GeqP2HIO#39929189 和 https://stackoverflow.com/a/36983738/2836621。 - Mark Setchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接