如何计算黑白像素的数量(Linux、ImageMagick 等)

9
我有一些黑白图像(见下面)。如何计算白色和黑色像素的数量(例如30%黑色和70%白色,或123456个黑色像素和39393个白色像素)?
附:我在Linux上工作,我应该使用什么?imagemagick吗?我更喜欢使用命令行界面程序。 sample

http://stackoverflow.com/questions/7019104/count-black-pixels-of-image - Ciro Santilli OurBigBook.com
4个回答

9
您可以使用ImageMagick的直方图功能来获取图像中每种颜色的像素计数。以您的图像为例:
$ convert XPH7c.gif -define histogram:unique-colors=true \
> -format %c histogram:info:-
    153985: (  0,  0,  0,255) #000000 black
    182138: (255,255,255,255) #FFFFFF white

因此,您的图像有153985个黑色像素和182138个白色像素。


6

如果您所有的像素都是黑色或白色,您可以使用ImageMagick计算平均像素亮度,然后乘以图像中像素的数量(宽度x高度):

convert bw.gif -format "%[nint(fx:mean*w*h)]" info:
182138

如果你想把白色像素和黑色像素的数量放在两个shell变量中,可以这样做:
read white black < <(convert bw.gif -format "%[fx:mean*w*h] %[fx:(1-mean)*w*h]" info:)

echo $white,$black
182138,153985

1
另一种方法是克隆图像并将克隆图像中的所有像素设置为黑色,然后根据原始图像计算绝对误差,如下所示:
convert XPH7c.gif \( +clone -evaluate set 0 \) -metric AE -compare -format "%[distortion]" info:
182138

这告诉你原始图像中与完全黑色克隆图像不同的像素有182,138个,即182,138个非黑色(白色)像素。

1

一种不那么智能但更直观的选项:

$ convert XPH7c.gif XPH7c.txt

$ grep "white" XPH7c.txt | nl | tail -1

182138 514,632: (255,255,255,255) #FFFFFF 白色

$ grep "black" XPH7c.txt | nl | tail -1

153985 530,632: ( 0, 0, 0,255) #000000 黑色

说明:

1)将gif文件转换为txt文件(提供每个像素坐标和相应颜色的人类可读列表)

0,0: ( 0, 0, 0,255) #000000 黑色

1,0: ( 0, 0, 0,255) #000000 黑色

2,0: (255,255,255,255) #FFFFFF 白色

(...)

530,632: ( 0, 0, 0,255) #000000 黑色

2) 使用grep列出所有"black"和"white"像素(仅显示最后一行信息,使用tail -1)

3) 额外步骤 -- 仅显示所需数据使用awk或其他类似工具

$ grep "black" XPH7c.txt | nl | tail -1 | awk '{print $8 ": " $1}'

黑色: 153985


问题在于txt文件的大小。 - Sigur

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