algorithm - 图像背景去除算法

标签 algorithm imagemagick image-manipulation alpha-transparency

我有很多白色背景的图像,我需要将其删除(使其透明)。我已经尝试过 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

enter image description here

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

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/

相关文章:

java - 在旋转数组中找到最小值。了解实现

php - PHP 中非常糟糕的 SVG 到 PNG 转换

Java代码提供图像草图效果[和其他有趣/有趣的效果]

java - 按顺序添加最少的元素

c - 正确括号的最长子串

sql-server - 什么是知识发现和数据挖掘?

php - 无法从 php exec 创建简单图像,可以使用与独立命令相同的命令创建

imagemagick - CentOS 上的 Apple 的 SIPS 工具?

python - 在 PIL 中使用 Image.point() 方法来操作像素数据

python - 使用 PIL 的 ImageDraw 模块