【问题标题】:Image background removal algorithms图像背景去除算法
【发布时间】:2015-04-14 19:13:42
【问题描述】:

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

另外,如果它能够正确处理这样的图像,那就太好了:
http://dev.addvert.it/cache/24eeab00e5987452d09fbeec0c7678d6_w472_h472_sc.jpg

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

【问题讨论】:

    标签: algorithm imagemagick image-manipulation alpha-transparency


    【解决方案1】:

    您不受将白色像素转换为透明像素的限制。您可能会采用左上角像素的颜色并使所有颜色透明的像素,它也适用于黑色背景:

    正如@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 命令的中间作为使透明的颜色 - 但它只是做同样的事情第一个版本。

    【讨论】:

    • 很好的答案,但我会放弃-alpha on 支持-draw 'matte 0,0 replace'
    • @emcconville 我很高兴聆听您的建议并从中学习,但我不确定我是否理解您建议的更好方法的微妙之处?你介意解释一下吗?
    • 当然@MarkSetchell。我放弃了我的答案,因为它与您的相同;但是,我选择使用 draw 的遮罩操作。 Mattecolor 完全相同,但自动继承了 alpha 处理——因此无需调用额外的 -alpha 标志。
    • @emcconville 非常感谢 - 我已经采纳了您提出的改进建议。
    • 感谢您和@emcconville 的回复。如果您看到您发布的图像,这是不可接受的,即使结果与我的结果几乎相同 :( 我需要在用户选择的背景上渲染这些图像,这就是为什么它不能在重要部分被删除也不能保持背景漂浮在...
    猜你喜欢
    • 2020-04-11
    • 2021-04-07
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2021-01-12
    • 2021-03-03
    相关资源
    最近更新 更多