我需要使用ImageMagick从图像中检测出最大的物体。它可以更大或更小,也可以在其他位置。它总是黑色,背景总是白色。
答案 0 :(得分:3)
与连接组件分析相似
convert objects.png -define connected-components:verbose=true \
-define connected-components:area-threshold=100 \
-connected-components 8 -auto-level output.png
Objects (id: bounding-box centroid area mean-color):
0: 595x842+0+0 296.7,420.0 499414 gray(255)
7: 37x30+342+632 360.0,646.5 1110 gray(0)
3: 12x15+465+375 470.5,382.0 180 gray(0)
1: 23x12+439+332 447.9,335.4 150 gray(0)
6: 13x16+451+425 456.6,430.6 136 gray(0)
列出的第一个对象(第一行)是一个白色对象,因为mean-color
是灰色的(255),因此是背景,所以我忽略了它。第二个是最大的(面积= 1110),我可以像这样在它周围画一个红色矩形
convert objects.png -stroke red -strokewidth 5 -fill none -draw "rectangle 342,632 379,662" out.png
如果要屏蔽最大对象边界框外的所有对象,可以这样做:
convert objects.png -alpha on \
\( +clone \
-evaluate set 0 \
-fill white \
-draw "rectangle 342,632 379,662" \
-alpha off \
\) -compose copy-opacity -composite result.png
基本上括号内的部分复制原始图像(+clone
),用黑色填充(-evaluate set 0
),然后在最大形状的边界框上绘制一个白框,然后使用黑白掩码设置我们开始使用的原始图像的不透明度。这让你有了这个: