我有一些黑白图像(见下面)。如何计算白色和黑色像素的数量(例如30%黑色和70%白色,或123456个黑色像素和39393个白色像素)?
附:我在Linux上工作,我应该使用什么?imagemagick吗?我更喜欢使用命令行界面程序。
附:我在Linux上工作,我应该使用什么?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个白色像素。
如果您所有的像素都是黑色或白色,您可以使用ImageMagick计算平均像素亮度,然后乘以图像中像素的数量(宽度x高度):
convert bw.gif -format "%[nint(fx:mean*w*h)]" info:
182138
read white black < <(convert bw.gif -format "%[fx:mean*w*h] %[fx:(1-mean)*w*h]" info:)
echo $white,$black
182138,153985
convert XPH7c.gif \( +clone -evaluate set 0 \) -metric AE -compare -format "%[distortion]" info:
182138
一种不那么智能但更直观的选项:
$ 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