脚本不起作用。我究竟做错了什么?

时间:2018-10-22 22:04:41

标签: linux

首先,我找到了本指南,其中详细介绍了我所需要的。

https://imagemagick.org/script/connected-components.php

enter image description here

对于我的一生,我无法使它正常工作。有人知道吗?

我已经尝试了指南中列出的脚本的多种变体。

同样,当我运行convert /var/www/mailtovoice/audrey/sean_look_grey.png-定义connected-components:verbose = true -connected-components 8 /var/www/mailtovoice/audrey/sean_look4.png

我得到了1000个物体。当我将其转换为只有3个对象的图像时,我得到100s。

2 个答案:

答案 0 :(得分:2)

Mark的想法正确,但是解决方案比他发布的要简单得多,因为ImageMagick的connected-components可以直接进行过滤和输出。

输入: enter image description here

Unix行尾(对于Windows使用^而不是\

convert image.png \
-define connected-components:area-threshold=100 \
-define connected-components:mean-color=true \
-connected-components 4 \
result.png


enter image description here

答案 1 :(得分:1)

Fred(@ fmw42)建议的方法要比此答案中所示的方法简单得多,并且更可取,因此,除了顽固的发烧友之外,所有其他人都应该使用Fred的答案。我不会删除它,而是将其显示出来,因为它可以构成其他更苛刻/涉及的处理的基础。


这是一种相当有趣的方式...找到所有斑点。即连接的组件:

convert spotty.png -define connected-components:verbose=true  -connected-components 4 null:

这将为您提供类似的内容,但有2,000多个行:

Objects (id: bounding-box centroid area mean-color):
0: 860x482+0+0 431.5,239.7 405738 gray(0)
800: 43x263+252+219 265.9,350.5 2458 gray(255)
2: 21x226+276+0 288.9,111.2 1540 gray(255) 
2216: 5x16+107+445 109.3,452.9 65 gray(255)
910: 7x15+276+228 279.0,234.5 63 gray(255)
491: 7x14+651+150 654.1,156.6 54 gray(255)
1207: 7x9+735+282 737.9,285.8 53 gray(255)
2313: 6x9+147+457 149.6,460.9 48 gray(255)
985: 8x9+754+238 757.3,242.0 48 gray(255)
...
...

现在使用awk查找尺寸(倒数第二个字段)小于1000的所有对象,并打印区域:

convert spotty.png \
   -define connected-components:verbose=true \
   -connected-components 4 null:             | 
   awk -v thresh=1000 'NR>1 && $(NF-1)<thresh{print " -region " $2 " -colorize 100%"}'

输出

-region 5x16+107+445 -colorize 100%
-region 7x15+276+228 -colorize 100%
-region 7x14+651+150 -colorize 100%
-region 7x9+735+282 -colorize 100%
...
...

现在重新加载原始图像,将彩色区域的填充颜色设置为红色,并完全按照上述方法重新生成要填充的区域列表:

convert spotty.png -fill red $(convert spotty.png -define connected-components:verbose=true  -connected-components 4 null: | awk -v thresh=1000 'NR>1 && $(NF-1)<thresh{print " -region " $2 " -colorize 100%"}' ) result.png

enter image description here


生成的命令归结为:

convert spotty.png -threshold 50% -fill red \
   -region 56x16+107+445 -colorize 100%     \
   -region 70x15+276+228 -colorize 100%     \
   -region ...           -colorize 100%     \
   ...
   ...
   result.png