我需要将最大的物体留在图像中

时间:2015-05-04 17:39:09

标签: image-processing imagemagick object-detection

我需要使用ImageMagick从图像中检测出最大的物体。它可以更大或更小,也可以在其他位置。它总是黑色,背景总是白色。 enter image description here

1 个答案:

答案 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

enter image description here

如果要屏蔽最大对象边界框外的所有对象,可以这样做:

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),然后在最大形状的边界框上绘制一个白框,然后使用黑白掩码设置我们开始使用的原始图像的不透明度。这让你有了这个:

enter image description here