首页 > 解决方案 > 在 ImageMagick / RMagick 中检测不透明像素的最有效方法

问题描述

我有一系列通过 HTML Canvas 创建的绘图。我需要使用这些图纸创建一个热图,以显示最常见的区域在哪里。

每幅图都是具有透明背景的 PNG 图像。唯一不透明的像素是用户绘制的像素。这里有几个示例图片:https ://imgur.com/a/saTK9d7

我正在寻找最有效的方法来获取每个图像的不透明像素,然后将其添加到矩阵中以生成热图。

我可以通过遍历每个像素并检查它的 alpha 值来得到它。但是,这些图像每张大约为 1400 x 750 像素,因此每张图像大约需要 1,000,000 次检查。当我们有数百张图像要动态分析时,这变得站不住脚了。

有没有办法更有效地做到这一点?我对所有想法持开放态度。

标签: rubynumpyimagemagickheatmaprmagick

解决方案


在命令行 ImageMagick 中,您可以使用 sparse-color: 或解析 txt: 列出所有不透明的像素。这是一个 100x100 的透明图像,左上角有一个 2x2 的红色方块。

在此处输入图像描述

convert img.png sparse-color:

0,0,srgba(255,0,0,1) 1,0,srgba(255,0,0,1) 0,1,srgba(255,0,0,1) 1,1,srgba(255,0,0,1)

或者

convert x.png txt: | tail -n +2 | grep -v "none" | awk '{print $1 $4}'

0,0:red
1,0:red
0,1:red
1,1:red


推荐阅读