如何在ImageMagick中筛选四种颜色并实现特定颜色归一化?
嘿,针对你用ImageMagick处理图像颜色的两个问题,我给你整理了具体的命令和实操思路,亲测好用:
问题一:筛选并保留四种不同颜色
要把图像中的所有颜色映射到指定的四种目标颜色,最方便的方法是用颜色重映射,不需要手动逐个替换:
方法1:用自定义调色板文件
- 先做一个1x4的小图像(比如叫
palette.png),每个像素对应你想要的四种颜色(比如红、蓝、绿、黄)。 - 运行命令:
convert input.png -remap palette.png output.png
ImageMagick会自动把原图中每个像素的颜色替换成调色板里最接近的那一种。
方法2:直接在命令里生成调色板
不想单独做调色板文件的话,也可以直接在命令里生成临时调色板:
convert input.png \( -size 1x4 xc:#FF0000 xc:#0000FF xc:#00FF00 xc:#FFFF00 +append \) -clut output.png
把xc:后面的颜色码换成你需要的四种颜色就行。
问题二:多色图像的分类转换(红系→纯红,蓝系→纯蓝,其余非白→黑,背景纯白)
这个需求需要分步骤处理,核心是用-fuzz参数定义颜色的相似范围,按顺序替换:
完整命令
convert input.png \ # 第一步:保留背景纯白(调整fuzz值适配你的实际背景,比如20%) -fuzz 20% -fill white -opaque white \ # 第二步:把所有红系颜色替换为纯红(#FF0000),fuzz控制红系范围 -fuzz 30% -fill "#FF0000" -opaque red \ # 第三步:把所有蓝系颜色替换为纯蓝(#0000FF) -fuzz 30% -fill "#0000FF" -opaque blue \ # 第四步:把剩下的非白色区域全部转为黑色 -fill black +opaque white \ output.png
参数说明
-fuzz <百分比>:用来控制“相似颜色”的范围,数值越大,能匹配的颜色越宽泛。比如你的红系颜色偏暗,就把fuzz调大一点(比如40%),直到所有想要的红系都被替换。-fill <颜色>:指定要替换成的目标颜色,支持颜色名(red)或十六进制码(#FF0000)。-opaque <颜色>:把所有和指定颜色(在fuzz范围内)的像素替换为fill的颜色。+opaque <颜色>:和-opaque相反,把不是指定颜色的像素替换为fill的颜色,这里用来收尾处理剩下的非白区域。
注意事项
处理顺序很重要:先保留背景纯白,再替换红、蓝系颜色,最后处理剩余颜色,避免前面的操作覆盖掉你想保留的区域。如果你的“纯白”不是严格的#FFFFFF,一定要先调整-fuzz的值匹配实际背景的灰度范围。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

