Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 从图像(命令行或代码)中删除除一种颜色以外的所有颜色_Image Processing_Imagemagick - Fatal编程技术网

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

Image processing 从图像(命令行或代码)中删除除一种颜色以外的所有颜色,image-processing,imagemagick,Image Processing,Imagemagick,我想从图像中提取单一颜色,例如a87830,将其他颜色更改为白色。输入可能有点嘈杂,因此可以包括相近颜色的相邻像素。理想情况下,末端的所有非白色像素将转换为黑色,即输出为1位深度的图像 我可能想批处理这个,所以我希望有一个像imagemagick命令行这样的东西,或者我可以使用PHP imagemagick扩展来编写代码。我确信ImageMagick必须能够做到这一点,如果能够计算出正确的参数,这就是为什么我给它加了标签,但我对其他软件持开放态度,只要它能在Linux上工作 背景:我正在尝试为程

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

我可能想批处理这个,所以我希望有一个像imagemagick命令行这样的东西,或者我可以使用PHP imagemagick扩展来编写代码。我确信ImageMagick必须能够做到这一点,如果能够计算出正确的参数,这就是为什么我给它加了标签,但我对其他软件持开放态度,只要它能在Linux上工作

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


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

convert in.png -fuzz 30% -fill black -opaque "#a87830" -threshold 10% out.png
通过添加更多不透明命令,您可以添加更多希望变为黑色的色调,如下所示

convert in.jpg -fuzz 20% -fill black  \
    -opaque "#a87830"                 \
    -opaque "#a6725f"                 \
    -threshold 1% out.png
这可能会让你减少模糊,从而消除其他你不想要的音调。

这里有一个尝试:

convert                              \
  http://i.stack.imgur.com/rK259.png \
 -fuzz 33%                           \
 -fill black                         \
 -opaque "#A87830"                   \
 -threshold 12%                      \
  black+white.png
-fuzz参数使所有颜色与-ophable定义的颜色在一定范围内匹配。无模糊,您将只匹配这些像素,它们正好是A87830

阈值将颜色像素转换为黑色或白色,其中百分比定义了限制:上方变为黑色,下方变为白色

您可以将命令从-opaque修改为+opaque,以反转颜色选择的含义:它将替换不是此颜色的像素。这次我跳过-threshold参数以保留颜色:

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

谢谢命令行中30%和10%的不同含义是什么?我希望会有类似的颜色,但只有在与目标颜色的像素相邻时才允许。这将允许jpeg/扫描仪的模糊性,但不包括您的示例中的黑色和紫色线条。30%意味着选择与a87830值的颜色距离在30%以内的像素。阈值为10%意味着将RGB值小于25,25,25(即255的10%)的所有像素设置为黑色,并将该值以上的所有像素设置为白色。因此,输出图像将是纯黑白的。我注意到,即使我将模糊和阈值降低到1%,我仍然可以从原始图像中获得所有的黑线。只有棕色的线条应该保留,所以黑色的线条应该像其他东西一样变成白色。。。。更改为使用+不透明a87830,然后使用-negate after-threshold效果很好。1%和5%的模糊度看起来同样好,但10%的模糊度包含了其他地图特征。到目前为止,仅在一张地图图像上进行了测试:它可能比典型的更干净……啊哈!从-opaque更改为+opaque几乎可以得到我想要的东西黑白是错误的,但我认为即使是我的ImageMagick skillz也可以解决这个问题。。。