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

Dar*_*ook 6 imagemagick image-processing

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

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

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

在此输入图像描述

Mar*_*ell 9

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

convert in.png -fuzz 30% -fill black -opaque "#a87830" -threshold 10% out.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

你可以通过添加更多命令来"添加"你想变成黑色的更多音调-opaque,就像这样

convert in.jpg -fuzz 20% -fill black  \
    -opaque "#a87830"                 \
    -opaque "#a6725f"                 \
    -threshold 1% out.png
Run Code Online (Sandbox Code Playgroud)

这可能会让你减少fuzz,从而删除你不想要的其他音调.


Kur*_*fle 7

这是一个尝试:

convert                              \
  http://i.stack.imgur.com/rK259.png \
 -fuzz 33%                           \
 -fill black                         \
 -opaque "#A87830"                   \
 -threshold 12%                      \
  black+white.png
Run Code Online (Sandbox Code Playgroud)

-fuzz参数使所有颜色都匹配在定义的颜色的某个接近范围内-opaque.不-fuzz,你只会匹配这些像素"#A87830".

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

黑色+ white.png

您可以修改命令从-opaque "<color-definition>"+opaque "<color-definition>"反转的颜色选择的意义:它将取代不在此颜色(这时候我跳过像素-threshold的参数,以保持颜色):

convert                              \
  http://i.stack.imgur.com/rK259.png \
 -fuzz 33%                           \
 -fill black                         \
 +opaque "#FFFFFF"                   \
  other.png
Run Code Online (Sandbox Code Playgroud)

other.png