如何使用CLI工具从白色背景的JPG中提取多张图片?
用ImageMagick自动提取白色背景JPG中的多张图片
嘿,你选ImageMagick真的找对工具了!它的连通区域识别功能正好能帮你不用手动指定坐标,自动把白色背景里的独立图片分割出来,还能保留原分辨率和质量。针对你的OSX 10.13.2和ImageMagick 7.0.7-28环境,直接用下面的命令就行:
magick input.jpg -threshold 99% -negate -connected-components 8 -auto-level -background white -alpha extract -background white -alpha off -crop %wx%h%+x%+y +repage output_%d.jpg
命令参数解释(帮你理解为啥这么写)
-threshold 99%:先把原图转成黑白模式,99%的阈值是为了精准区分纯白背景和非白色的主体内容——背景会变成纯白色,主体变成黑色。如果你的背景不是绝对纯白,可以微调这个数值(比如95%、98%)来适配。-negate:反转颜色,让背景变成黑色,主体变成白色,这样ImageMagick更容易识别独立的连通区域。-connected-components 8:启用8连通区域识别(相比4连通,能识别斜向相连的主体,更准确),它会自动找出所有独立的图像块。-auto-level:调整图像对比度,确保主体区域的细节清晰,避免后续裁剪出现模糊。-background white -alpha extract:生成一个透明度掩码,把原来的白色背景区域设为透明,方便后续裁剪。-background white -alpha off:把透明区域重新转回白色背景,保持输出图片的背景一致性。-crop %wx%h%+x%+y +repage:根据识别到的每个连通区域的尺寸和位置自动裁剪,%wx%h%+x%+y是ImageMagick的内置变量,对应区域的宽度、高度、x坐标、y坐标;+repage用来重置裁剪后的图像偏移信息,避免后续处理出问题。output_%d.jpg:输出的文件名格式,%d会自动从0开始给每个提取出的图片编号,比如output_0.jpg、output_1.jpg。
额外优化:保留最高质量
如果要确保输出图片和原图质量一致,可以在命令末尾加上-quality 100参数:
magick input.jpg -threshold 99% -negate -connected-components 8 -auto-level -background white -alpha extract -background white -alpha off -crop %wx%h%+x%+y +repage -quality 100 output_%d.jpg
小提示
测试的时候可以先拿一张小图试试,调整-threshold的数值,直到所有主体都被准确识别和分割。ImageMagick 7用magick命令是对的,旧版本才用convert,你的版本完全兼容这个命令。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

