You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下使用ImageMagick裁剪并遍历非白色Polygon的方法

使用ImageMagick裁剪并遍历处理图片中的多边形(白色背景)

针对白色背景、前景为多色多边形的图片,你可以通过连通区域分析结合脚本遍历的方式,逐个裁剪并处理每个多边形,以下是具体步骤:


方法一:按连通区域(位置)分割多边形

适合处理同一颜色但分开、或不同颜色的独立多边形,按像素连通性识别每个多边形区域:

1. 查看连通区域信息

先执行命令获取所有前景多边形的边界坐标,确认每个区域的位置:

convert input.png -threshold 0 -negate -define connected-components:verbose=true -connected-components 8 null:
  • -threshold 0 -negate:将白色背景转为黑色,所有非白色的多边形前景转为白色,便于连通区域识别
  • -connected-components 8:采用8连通规则(包含对角线方向),更贴合多边形的形状
  • 输出内容会包含每个区域的ID、边界坐标(x,y,width,height)、面积等,过滤掉gray(0)的背景区域即可得到所有多边形信息

2. 编写脚本批量裁剪

用bash脚本遍历上述输出,自动裁剪每个多边形并保留原形状(背景透明):

#!/bin/bash
# 替换为你的输入图片文件名
INPUT_IMG="input.png"

# 提取前景多边形的连通区域信息,过滤背景
convert "$INPUT_IMG" -threshold 0 -negate -define connected-components:verbose=true -connected-components 8 null: | grep -v "gray(0)" | while read line; do
    # 提取区域坐标和ID
    COORDS=$(echo "$line" | awk '{print $2}')
    AREA_ID=$(echo "$line" | awk '{print $1}')
    
    # 裁剪区域并去除白色背景,保留多边形形状
    convert "$INPUT_IMG" -crop "$COORDS" +repage \
        \( +clone -transparent white -fill black -opaque none \) \
        -compose CopyOpacity -composite "polygon_${AREA_ID}.png"
done
  • -compose CopyOpacity:将裁剪区域内的白色背景转为透明,最终得到仅包含多边形的图片
  • 生成的文件会以polygon_<ID>.png命名,每个文件对应一个独立多边形

方法二:按颜色分割多边形

如果需要按颜色分类处理多边形,可先提取所有前景颜色,再针对每个颜色生成掩码并裁剪:

1. 提取所有前景颜色

执行命令获取图片中所有非白色的颜色值:

convert input.png -transparent white -unique-colors txt:- | grep -v "transparent" | awk '{print $3}'

输出示例:#ff0000、#00ff00等,对应不同颜色的多边形

2. 按颜色批量裁剪

用脚本遍历每个颜色,生成对应掩码并裁剪该颜色下的所有多边形:

#!/bin/bash
INPUT_IMG="input.png"

# 获取所有非白色的前景颜色
COLORS=$(convert "$INPUT_IMG" -transparent white -unique-colors txt:- | grep -v "transparent" | awk '{print $3}')

for COLOR in $COLORS; do
    # 生成当前颜色的掩码文件
    COLOR_NAME=${COLOR//\#/}  # 去掉#号作为文件名部分
    convert "$INPUT_IMG" -fill black +opaque "$COLOR" -transparent black "mask_${COLOR_NAME}.png"
    
    # 提取该颜色下的连通区域并裁剪
    convert "mask_${COLOR_NAME}.png" -define connected-components:verbose=true -connected-components 8 null: | grep -v "gray(0)" | while read line; do
        COORDS=$(echo "$line" | awk '{print $2}')
        AREA_ID=$(echo "$line" | awk '{print $1}')
        
        # 裁剪并保留多边形形状
        convert "$INPUT_IMG" -crop "$COORDS" +repage \
            "mask_${COLOR_NAME}.png" -crop "$COORDS" +repage \
            -compose CopyOpacity -composite "polygon_${COLOR_NAME}_${AREA_ID}.png"
    done
    
    # 删除临时掩码文件
    rm "mask_${COLOR_NAME}.png"
done

注意事项

  • 若图片存在抗锯齿边缘,可添加-blur 0x1或调整-threshold参数(如-threshold 5%),避免细碎的杂色区域被误识别
  • 连通规则可根据多边形形状调整:-connected-components 4仅识别上下左右方向的连通区域,适合规则矩形;8连通更适合不规则多边形
  • 脚本中的文件名、输出路径可根据实际需求修改

内容的提问来源于stack exchange,提问作者BlueConch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:20:20