如何使用ImageMagick convert的直方图功能且不统计透明像素?
完全可以通过ImageMagick内置的蒙版机制实现你的需求,无需额外处理文本数据。
核心需求解决方案:排除所有透明像素统计直方图
执行以下命令即可仅统计alpha>0的非透明区域像素生成直方图:
# ImageMagick 6 版本 convert 你的输入图片.png \ \( +clone -alpha extract -threshold 1% -write mpr:alpha_mask +delete \) \ -mask mpr:alpha_mask \ +mask \ histogram:输出直方图.gif # ImageMagick 7 版本将开头的convert换成magick即可 magick 你的输入图片.png \ \( +clone -alpha extract -threshold 1% -write mpr:alpha_mask +delete \) \ -mask mpr:alpha_mask \ +mask \ histogram:输出直方图.gif
参数说明:
+clone -alpha extract:复制原图并单独提取alpha通道-threshold 1%:将alpha值大于1%的像素标记为待统计区域(如果只需统计完全不透明的像素,可将阈值调整为99%)- 生成的蒙版暂存在内存
mpr:alpha_mask中,应用到原图后,生成直方图时只会计算蒙版覆盖的非透明区域像素
扩展需求:排除指定颜色的像素
如果你需要额外排除原图中的黑白等指定颜色,可以叠加-transparent参数:
convert 你的输入图片.png \ -fuzz 3% \ -transparent #FFFFFF \ -transparent #000000 \ \( +clone -alpha extract -threshold 1% -write mpr:alpha_mask +delete \) \ -mask mpr:alpha_mask \ +mask \ histogram:输出直方图.gif
-fuzz 3%允许匹配和指定颜色接近的近似色,不需要近似匹配可以删掉该参数
优化选项
如果生成的直方图还是存在坐标轴拉伸问题,可以加上参数-define histogram:unique-colors=true仅统计实际出现的唯一颜色,避免空白色阶占用坐标轴空间。
内容的提问来源于stack exchange,提问作者Alice
相关产品推荐
相关产品推荐

