Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 图像背景去除算法_Algorithm_Imagemagick_Image Manipulation_Alpha Transparency - Fatal编程技术网

Algorithm 图像背景去除算法

Algorithm 图像背景去除算法,algorithm,imagemagick,image-manipulation,alpha-transparency,Algorithm,Imagemagick,Image Manipulation,Alpha Transparency,我有很多白色背景的图像,我需要将其删除(使其透明)。我已经尝试过imagemagick,有些图像效果很好,但仍然无法在黑暗背景下使用。 我是编程这一分支的新手。。。有人知道一些去除背景的好算法吗 另外,如果它能够正确处理这样的图像,那就太好了: convertdiff的问题在于它会擦除大量图像,而边框算法不会触及中间部分。 我完全理解计算器做这样的事情有多难,转换的结果让我非常惊讶,但是如果有更好的解决方案,为什么不问问呢D您不必将白色像素转换为透明像素。您可以选择左上角像素的颜色,使所有颜色

我有很多白色背景的图像,我需要将其删除(使其透明)。我已经尝试过imagemagick,有些图像效果很好,但仍然无法在黑暗背景下使用。
我是编程这一分支的新手。。。有人知道一些去除背景的好算法吗

另外,如果它能够正确处理这样的图像,那就太好了:

convert
diff
的问题在于它会擦除大量图像,而
边框
算法不会触及中间部分。

我完全理解计算器做这样的事情有多难,转换的结果让我非常惊讶,但是如果有更好的解决方案,为什么不问问呢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
命令的中间,以使其透明-但它只执行与第一个版本相同的操作。

回答得好,但是我会把
-alpha放在
-draw'matte 0,0 replace'
@emcconville上,我很乐意听你的建议并从中学习,但我不确定我是否理解你建议的方法的精妙之处?请你解释一下好吗?当然可以。我放弃了我的答案,因为它和你的完全相同;但是,我选择使用draw的蒙版操作。与
color
完全相同,但会自动继承alpha处理,因此无需调用其他
-alpha
标志。@emcconville非常感谢您-我已纳入您的建议改进。感谢您和@emcconville的回复。如果你看到你发布的图像,这是不可接受的,即使结果与我的几乎相同:(我需要在用户选择的背景上渲染这些图像,这就是为什么它不能在重要部分被擦除,也不能使背景仍在浮动的原因。)。。。