【问题标题】:ImageMagick – Split Transparency Image Along Internal Non-transparent Object BordersImageMagick - 沿内部不透明对象边界分割透明图像
【发布时间】:2019-02-10 17:32:03
【问题描述】:

我有一个包含三个不透明对象的透明图像,每个对象都由透明度分隔。有没有一个简单的命令——不是一个带有无数选项、参数和随机极客在图片中行走的命令——将这张图片分解成三个部分,每个部分都在一个图片文件中。

请访问this link查看图片类型。

非常感谢您的帮助。

【问题讨论】:

  • 我看到一个高竖条、一个大矩形、一个小矩形和 4 个字母。你指的是哪 3 个对象?你用什么操作系统?
  • 对象是否总是相同的大小和相同的位置?
  • 其实我只对大片黑色区域(有绿色斑点)感兴趣;始终相同的大小和位置。
  • 我回答的第一行就是你所需要的。
  • 感谢您的宝贵时间和宝贵的帮助。我现在可以自动处理数百张照片。

标签: imagemagick transparency crop


【解决方案1】:

如果你想要的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

最后一个是空的!


如果它们不总是在同一个地方,我会查看图像的 alpha/transaprency 层:

convert image.png -alpha extract alpha.png

因为它在白色上显示了您想要的位,所以我会使用 "Connected Component Analysis"

寻找白色斑点
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

希望能做到你想要的。

【讨论】:

    【解决方案2】:

    如果在类 Unix 系统上,您可以尝试我的使用 ImageMagick 的 multicrop2 bash 脚本。这是一个与 Mark Setchell 的代码示例非常相似的脚本,只是添加了一些花里胡哨。

    输入:

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


    它将提取每个对象,就像 Mark 对 -connected-components 的使用一样,我的脚本也使用了它。 -b none 告诉脚本背景颜色是透明的。 -f 1 表示使用 1% 的模糊值将背景与对象分开。 -u 3 表示不旋转生成的图像。

    结果:

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

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


    -d 100 丢弃包含少于 100 个连续像素的任何区域。所以你只会得到上面显示的前 3 张图片。

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

    【讨论】:

    • 我访问了该网站。非常不幸的是,我无法在我这边测试您的脚本以进行确认。我在 OS X 上,找不到任何可靠的应用程序来提取 DMS 档案。由于其母公司,我不再信任 The Unarchiver 应用程序。
    • 刚发现是纯文本文件; mv multicrop2.{dms,sh} – 脚本在我这边测试成功。感谢您的宝贵时间。
    • 是的,bash shell 脚本是简单的文本文件。
    • 该死的....你的脚本太棒了,非常感谢你,更感谢这个,很长时间以来一直在寻找类似的东西,第一次尝试它就完美地完成了工作当在 50MP png 文件上单独提取具有数百个精灵的图像表的许多艺术作品时,我真的很感激! ^^
    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 2012-02-24
    • 2023-04-03
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2011-03-14
    • 2014-01-25
    相关资源
    最近更新 更多