在图像中计算特定颜色的像素数量?

3
我希望能够循环遍历一个图像文件夹,并在控制台输出有多少像素是#333212,有多少是#332211等。在PHP中是否可能实现?我找到了一个可以“操作”图像的,但没有一个能够检测每个像素颜色的工具或函数。在PHP库中是否存在这样的工具或函数?编辑:不一定非要使用PHP,安装的包越少越好。

http://php.net/manual/en/imagick.getimagepixelcolor.php - Daan
我记得安装那个时遇到了一些问题,我要再试一次。它不一定是php(请查看我的编辑)。 - Helen Che
如果您使用的是某种Unix系统,那么很有可能ImageMagick已经安装在您的计算机上了。 - Daan
1个回答

8
您可以使用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

现在将非红色变为黑色,以便只有红色像素保留。
convert out.png -fill black +opaque red n.png

现在,通过克隆生成的图片并将克隆体完全变为黑色(将所有内容设置为零),运行比较来计算红色像素的数量。
convert n.png                    \
    \( +clone -evaluate set 0 \) \
    -metric AE -compare          \
    -format "%[distortion]" info:
2500

2500看起来对我来说就像是50px乘以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:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接