我想从图像中提取单一颜色(例如#a87830),将每隔一种颜色更改为白色。输入可能有点嘈杂,因此可以包括近色的相邻像素。理想情况下,末端的所有非白色像素都将转换为黑色(即输出为1位深度图像)。
我可能想要批量处理这个,所以我希望像imagemagick命令行之类的东西,或者我可以使用PHP imagemagick扩展编写的东西。 (我确信ImageMagick必须能够做到这一点,如果正确的参数可以解决,这就是我标记它的原因,但我对其他软件开放,只要它适用于Linux。)
背景:我正在尝试为ContourTrace程序执行第一个预处理阶段,此图像很好地显示了这个阶段:
答案 0 :(得分:9)
不确定这是否足够复杂。将所有类似的像素(在您声明的颜色的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
,从而删除其他不需要的音调。
答案 1 :(得分:7)
这是一个尝试:
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>"
到 反转 颜色选择的含义:它将替换非NOT的像素这个颜色(这次我跳过-threshold
参数以保持颜色):
convert \
http://i.stack.imgur.com/rK259.png \
-fuzz 33% \
-fill black \
+opaque "#FFFFFF" \
other.png