我有很多白色背景的图像,我需要将其删除(使其透明)。我已经尝试过 imagemagick convert对于一些效果很好的图像,但仍然不能在深色背景下使用。
我是这个编程分支的菜鸟...有人知道一些去除背景的好算法吗?
另外,如果它能正确处理像这样的图像,那就太好了:
http://dev.addvert.it/cache/24eeab00e5987452d09fbeec0c7678d6_w472_h472_sc.jpg
convert diff
的问题是它抹掉了很多图像,而 border
算法没有触及中心部分。
我完全理解计算器做这样的事情有多难,我对转换的结果感到非常惊讶,但如果有更好的解决方案的机会,为什么不问呢? :D
最佳答案
您并不局限于将白色像素转换为透明像素。您可以采用左上角像素的颜色,并使所有颜色透明的像素也适用于黑色背景:
正如@emcconville 所建议的,以下两个选项中的第一个更简洁:
convert towel.jpg -fill none -fuzz 2% -draw 'matte 0,0 replace' output.png
或者,根据我的原文,
convert towel.jpg -alpha on -fill none -fuzz 5% -draw 'color 0,0 replace' output.png
您可能会发现这更具可读性......
convert towel.jpg -fuzz 5% \
-transparent $(convert towel.jpg -format "%[pixel:p{0,0}]" info:) \
output.png
在第二行中,$(convert ...)
只是获取左上角像素的颜色并将其输入到外部 convert
命令的中间作为透明的颜色 - 但它只是做与第一个版本相同的事情。
关于algorithm - 图像背景去除算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28504787/