计算图像中多少个具有特定颜色的像素?

问题描述 投票:2回答:1

我想遍历图像文件夹并输出到控制台,以#333212像素,#332211像素等。在PHP中这可能吗?我发现了package可以操作图像,但是找不到可以检测每个像素颜色的图像。 PHP库中是否存在这样的工具或功能?

编辑:不必在PHP中,安装的软件包越少越好。

image imagemagick-convert
1个回答
5
投票

您可以使用ImageMagick轻松完成此操作。假设我们要计算红色像素...

# First create a little test strip with black, white, red, green and blue parts
convert -size 50x50 xc:black xc:white xc:red xc:lime xc:blue +append out.png

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9vYnVNUS5wbmcifQ==” alt =“在此处输入图像描述”>

现在将任何非红色转换为黑色,以便仅保留red像素

convert out.png -fill black +opaque red n.png

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9jUGlIUi5wbmcifQ==” alt =“在此处输入图像描述”>

现在通过克隆生成的图片并将克隆完全变为黑色(将所有内容设置为零,然后进行比较以计数有多少个非黑色像素来计数红色像素)>

convert n.png                    \
    \( +clone -evaluate set 0 \) \
    -metric AE -compare          \
    -format "%[distortion]" info:
2500

和2500在我看来像是50px x 50px:-)

AE是绝对误差,即不同像素数的简单计数。 -format "%[distortion]" info:部分使ImageMagick以数字(%distortion)而不是图像的形式输出计数(info:)。

显然,您的问题是将red替换为"#333212"

您也可以在一次访问中完成所有操作,例如:

convert input.png               \
   -fill black +opaque red      \
   \( +clone -evaluate set 0 \) \
   -metric AE -compare          \
   -format "%[distortion]" info:
© www.soinside.com 2019 - 2024. All rights reserved.