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

6
我想从图像中提取一种单一的颜色(例如#a87830),将其他所有颜色都变成白色。输入可能有些嘈杂,所以相邻的相似颜色的像素也可以被包括在内。理想情况下,所有非白色像素最终都会被转换成黑色(即输出是1位深度的图像)。
我可能需要批量处理此操作,因此希望像ImageMagick命令行这样的东西,或者我可以使用PHP ImageMagick扩展编写的代码。(我确信ImageMagick一定能够做到这一点,只要正确的参数就可以了,这就是为什么我标记了它,但只要它在Linux上运行,我也可以接受其他软件。)
背景:我正在尝试对ContourTrace程序进行第一次预处理阶段,这在这张图片中很好地展示了出来。

enter image description here

2个回答

10

不确定这是否对您足够复杂。将所有与您指定颜色相似的像素(在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,从而消除您不想要的其他音调。


谢谢!您的命令行中的30%和10%有什么不同的含义?我希望有一些意思是“允许类似的颜色,但仅当与目标颜色的像素相邻时”。这将允许jpeg /扫描模糊,但不包括您示例中的黑色和紫色线条。 - Darren Cook
30% 的意思是“在颜色距离方面选择 30% 内的像素”,以您的 a87830 值为基准。10% 的阈值意味着将所有 RGB 值小于 25,25,25(即 255 的 10%)的像素设置为黑色,所有大于该值的像素设置为白色。因此,输出图像将是纯黑白色。 - Mark Setchell
我注意到即使我将模糊度和阈值都降低到1%,仍然会保留原始图像中的所有黑线。(只应保留棕色线条,因此黑色线条应该变为白色,就像其他所有内容一样。) - Darren Cook
改用 +opaque "#a87830",然后在 -threshold 之后使用 -negate 效果很好。1% 和 5% 的模糊度看起来一样好,但是10%的话会包含其他地图特征。(目前只在一张地图图像上进行了测试:可能这张图比典型情况下更清晰...) - Darren Cook

8

这里有一个可以尝试的:

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

other.png


啊哈!将“-opaque”改为“+opaque”几乎可以得到我想要的效果(黑色和白色的位置颠倒了,但我认为即使是我那可怜的ImageMagick技能也能解决这个问题……) - Darren Cook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接