ImageMagick - 沿内部非透明对象边框分割透明度图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageMagick - 沿内部非透明对象边框分割透明度图像相关的知识,希望对你有一定的参考价值。

我有一个透明的图像,包含三个非透明对象,每个对象由透明度分隔。是否有一个简单的命令 - 没有一个有数以万计的选项,参数和随机极客走在图片中 - 将这张图片分解为三个部分,每个部分都在一个图片文件中。

请访问this link查看图片。

非常感谢你的帮助。

答案

如果你想要的3个组件总是在同一个地方,你可以根据坐标提取:

convert image.png -crop 164x146+27+0 +repage result-0.png
convert image.png -crop 12x146+0+0   +repage result-1.png
convert image.png -crop 30x7+138+151 +repage result-2.png

enter image description here

enter image description here

最后一个是空的!


如果它们不总是在同一个地方,我会看图像alpha / transparency layer:

convert image.png -alpha extract alpha.png

enter image description here

因为它显示你想要的白色位,我会寻找白色斑点,使用“连接组件分析”

convert image.png -alpha extract                  
  -define connected-components:verbose=true       
  -define connected-components:area-threshold=200 
  -connected-components 4 -normalize result.png

产量

Objects (id: bounding-box centroid area mean-color):
2: 164x146+27+0 108.5,72.5 23944 srgb(255,255,255)
3: 32x161+174+0 196.5,87.0 2670 srgb(2,2,2)
5: 174x15+0+146 79.8,152.8 2370 srgb(1,1,1)
1: 15x146+12+0 19.0,72.5 2190 srgb(2,2,2)
0: 12x146+0+0 5.5,72.5 1752 srgb(255,255,255)
39: 30x7+138+151 152.5,154.0 210 srgb(255,255,255)

这向我们展示了你图像中的所有斑点。回顾alpha图层,你只想要白色图层,你想要第二个字段就行了,因为它告诉你在哪里裁剪那个blob。

这导致我们:

#!/bin/bash

# Edit this according to your input image name
image="image.png"

i=0
convert "$image" -alpha extract                    
   -define connected-components:verbose=true       
   -define connected-components:area-threshold=200 
   -connected-components 4 -normalize result.png | 
      awk '/255,255,255/{print $2}'              | 
         while read c ; do
            convert "$image" -crop "$c" +repage result-$i.png
            ((i=i+1))
         done

希望能做到你想要的。

另一答案

如果在类Unix系统上,您可以尝试使用ImageMagick的multicrop2 bash脚本。这是一个与Mark Setchell的代码示例非常相似的脚本,其中添加了更多的铃声和口哨声。

输入:

enter image description here

multicrop2 -b none -f 1 -u 3 image.png results.png

它将提取每个对象,例如Mark使用-connected-components,我的脚本也使用它们。 -b none告诉脚本背景颜色是透明的。 -f 1表示使用1%的模糊值将背景与对象分开。 -u 3表示没有对所得图像进行不旋转。

结果:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

如果你不关心这些字母,你可以这样做

multicrop2 -b none -f 1 -u 3 -d 100 test.png results2.png

-d 100丢弃包含少于100个连续像素的任何区域。因此,您将只获得上面显示的前3个图像。

http://www.fmwconcepts.com/imagemagick/index.php上查看我的脚本

以上是关于ImageMagick - 沿内部非透明对象边框分割透明度图像的主要内容,如果未能解决你的问题,请参考以下文章

Imagemagick 将透明图像裁剪为蒙版

当图像内部存在背景颜色(不仅仅是边框)时,Imagemagick trimimage功能也会修剪

iOS绘制物理按钮 - 透明圆角渐变边框

CSS3 跨弧平移

ImageMagick:沿一个轴非线性拉伸图像

CSS 内部边框,带有背景图像的div上的不透明度