如何裁剪两个图像的差异?

时间:2015-01-20 10:43:55

标签: imagemagick imagemagick-convert

我想拍这两张照片:

frame 1

frame 2

基本上产生了这个:

result

我已经使用comparefuzz来定义已更改的部分。是否有可能获得该区域的边界框并裁剪第二帧?

1 个答案:

答案 0 :(得分:3)

我会沿着这些方向做点什么:

convert a.jpg b.jpg -colorspace gray -blur 0x2 \
       -compose difference -composite          \
       -threshold 20% out.jpg

转换为灰度并模糊一点以隐藏小差异,然后计算差异和阈值以制作像这样的二值化图像:

enter image description here

然后我会去 Connected Components Analysis 找到图像中最大的对象,如下所示:

convert a.jpg b.jpg -colorspace gray -blur 0x2     \
   -compose difference -composite -threshold 20%   \
   -define connected-components:verbose=true       \
   -define connected-components:area-threshold=100 \
   -connected-components 8 out.jpg

Objects (id: bounding-box centroid area mean-color):
  0: 1029x1079+0+0 515.0,538.4 1102870 srgb(0,0,0)
  17: 76x147+326+564 366.5,641.4 5827 srgb(252,252,252)
  22: 18x50+358+612 365.1,635.3 568 srgb(0,0,0)
  11: 34x31+810+345 825.5,361.1 317 srgb(255,255,255)
  16: 57x97+25+539 52.3,587.2 286 srgb(255,255,255)
  14: 46x65+120+414 144.0,444.3 203 srgb(255,255,255)
  18: 27x49+23+579 36.9,601.0 118 srgb(255,255,255)
  24: 16x8+703+641 710.6,644.5 102 srgb(255,255,255)

-define connected-components:verbose=true导致单个blob作为文本输出以进行解析。

-define connected-components:area-threshold=100表示只输出面积大于100像素的blob。

-connected-components 8表示允许8连接的像素被视为属于同一个对象。除了正常的北,东,南和西外,8连通意味着东北,东南,西南和东北邻居。默认情况下,ImageMagick仅将4个连接的像素视为属于同一个对象 - 它的速度更快; - )

你的玩家是项目id 17 - 第二行,你可以看到边界框,并用

将其切割出来。
convert b.jpg -crop 76x147+326+564 player.jpg

enter image description here

注意:对于连接组件分析,您将需要ImageMagick 6.8.9-10或更高版本。