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

Remove all except one colour from an image (commandline or code)

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

我可能想批处理这个,所以我希望有类似 imagemagick 命令行的东西,或者我可以使用 PHP imagemagick 扩展编写的代码。 (我确信 ImageMagick 一定能够做到这一点,如果可以计算出正确的参数,这就是我标记它的原因,但我对其他软件持开放态度,只要它适用于 Linux。)

背景: 我正在尝试为 ContourTrace 程序做第一个预处理阶段,这张图很好地展示了这一点:

不确定这对您来说是否足够复杂。将所有相似像素(在您指定颜色的 30% 以内)转换为黑色,然后将其余像素转换为白色。

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

您可以 "add in" 更多您希望通过添加更多 -opaque 命令变成黑色的色调,就像这样

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

这可能允许您降低 fuzz 从而删除您不想要的其他音调。

这里有一个可以尝试:

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

-fuzz 参数使所有颜色都与 -opaque 定义的颜色在一定范围内相匹配。否 -fuzz,您将仅匹配恰好 "#A87830".

的这些像素

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

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

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