图像背景删除算法

时间:2015-02-13 17:00:28

标签: algorithm imagemagick image-manipulation alpha-transparency

我有许多带有白色背景的图像,我需要将其删除(使其透明)。我已经尝试过imagemagick convert和一些效果很好的图片,但仍然不能在黑暗的背景下使用。
我在这个编程分支中是一个菜鸟...有人知道一些好的算法来删除背景吗?

另外,如果它可以正确处理这样的图像会很棒:
http://dev.addvert.it/cache/24eeab00e5987452d09fbeec0c7678d6_w472_h472_sc.jpg

转换diff的问题是它会删除大量图像,而border算法不会触及中心部分。
我完全理解计算器做这样的事情有多难,我对转换的结果感到非常惊讶,但如果有更好的解决方案,为什么不问? :d

1 个答案:

答案 0 :(得分:2)

您不必将白色像素转换为透明。您可以采用左上角像素的颜色,使所有颜色透明的像素也适用于黑色背景:

正如@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

enter image description here

您可能会发现这更具可读性......

convert towel.jpg -fuzz 5%                                           \
   -transparent $(convert towel.jpg -format "%[pixel:p{0,0}]" info:) \
   output.png

在第二行中,$(convert ...)只获取左上角像素的颜色并将其作为透明颜色输入到外部convert命令的中间 - 但它只是在做和第一个版本一样。