【问题标题】:Remove all except one colour from an image (commandline or code)从图像中删除除一种颜色之外的所有颜色(命令行或代码)
【发布时间】:2015-04-20 17:33:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: image-processing imagemagick


    【解决方案1】:

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

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

    您可以“添加”更多您希望通过添加更多-opaque 命令来变黑的色调,就像这样

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

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

    【讨论】:

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

    这是一个尝试:

    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
    

    【讨论】:

    • 啊哈!从-opaque 更改为+opaque 几乎可以满足我的需求(黑色和白色是错误的,但我认为即使是我的ImageMagick Skillz 也能解决这个问题......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多