从图像(命令行或代码)中删除除一种颜色以外的所有颜色

时间:2015-04-20 07:53:22

标签: image-processing imagemagick

我想从图像中提取单一颜色(例如#a87830),将每隔一种颜色更改为白色。输入可能有点嘈杂,因此可以包括近色的相邻像素。理想情况下,末端的所有非白色像素都将转换为黑色(即输出为1位深度图像)。

我可能想要批量处理这个,所以我希望像imagemagick命令行之类的东西,或者我可以使用PHP imagemagick扩展编写的东西。 (我确信ImageMagick必须能够做到这一点,如果正确的参数可以解决,这就是我标记它的原因,但我对其他软件开放,只要它适用于Linux。)

背景:我正在尝试为ContourTrace程序执行第一个预处理阶段,此图像很好地显示了这个阶段:

enter image description here

2 个答案:

答案 0 :(得分:9)

不确定这是否足够复杂。将所有类似的像素(在您声明的颜色的30%范围内)转换为黑色,然后将其余像素转换为白色。

convert in.png -fuzz 30% -fill black -opaque "#a87830" -threshold 10% out.png

enter image description here

您可以通过添加更多-opaque命令来“添加”更多您希望变为黑色的音色,例如

convert in.jpg -fuzz 20% -fill black  \
    -opaque "#a87830"                 \
    -opaque "#a6725f"                 \
    -threshold 1% out.png

可以让您减少fuzz,从而删除其他不需要的音调。

答案 1 :(得分:7)

这是一个尝试:

convert                              \
  http://i.stack.imgur.com/rK259.png \
 -fuzz 33%                           \
 -fill black                         \
 -opaque "#A87830"                   \
 -threshold 12%                      \
  black+white.png

-fuzz参数使所有颜色都与-opaque定义的颜色接近。没有-fuzz,您只会匹配这些正好是"#A87830"的像素。

-threshold将彩色像素转换为黑色或白色,其中百分比定义了限制:上面变成黑色,下面变成白色。

black+white.png

您可以将命令从-opaque "<color-definition>"修改为+opaque "<color-definition>" 反转 颜色选择的含义:它将替换非NOT的像素这个颜色(这次我跳过-threshold参数以保持颜色):

convert                              \
  http://i.stack.imgur.com/rK259.png \
 -fuzz 33%                           \
 -fill black                         \
 +opaque "#FFFFFF"                   \
  other.png

other.png