我可以使用 ImageMagick 获取不同颜色像素数量的列表吗?

Can I get a list of the number of different color pixels with ImageMagick?

假设我有以下图像:

当我使用 ImageMagick 时,命令 identify -format %k image.png 计算此图像上不同颜色的数量。我对这张图片的输出是 1031,这意味着这张图片有 1031 种不同的颜色。然而,视觉上说我有大约 5 种不同的颜色:

black
white
grey
light green
dark green

我想找到一种获取主要颜色像素数量列表的方法。例如,假设我在最后一张图片上有 1000 像素,所以我希望是这样的:

black:10
white:50
grey:200
light green:690
dark green:50

有没有办法让ImageMagick像上次一样显示输出值?只是为了让我知道图像中主要颜色的百分比?

您可以加​​载图像,告诉 ImageMagick 您希望将其减少到 5 种颜色,然后像这样得到直方图:

magick 0N9iv.png -colors 5 -verbose info: | grep -A5 Histogram:

  Histogram:
    459: (181.83,198.952,162.503,229.414) #B6C7A3E5 srgba(71.306%,78.0204%,63.7265%,0.899662)
    26749: (182.035,228.807,158.076,254.874) #B6E59EFF srgba(71.3861%,89.7283%,61.9907%,0.999506)
    577: (191.945,227.688,174.459,100.095) #C0E4AE64 srgba(75.2725%,89.2894%,68.4152%,0.392528)
    727: (196.666,220.169,180.959,255) #C5DCB5FF srgba(77.124%,86.3407%,70.9642%,1)
    4384: (219.415,217.829,213.189,255) #DBDAD5FF srgba(86.045%,85.423%,83.6034%,1)

请注意,这意味着 ImageMagick 会自行选择颜色。如果您特别希望将图像映射到您自己的特定颜色集,请像这样制作这些颜色的调色板:

magick xc:black xc:white xc:gray xc:lightgreen xc:darkgreen +append palette.png

然后告诉 ImageMagick 将所有颜色映射到这 5 种颜色并查看输出:

magick 0N9iv.png +dither -remap palette.png -verbose info: | grep -A5 Histogram:

示例输出

Histogram:
81: (0,0,0,255) #000000FF black
22: (126,126,126,255) #7E7E7EFF gray
28270: (144,238,144,255) #90EE90FF LightGreen
4523: (255,255,255,255) #FFFFFFFF white
Colormap entries: 5

您也可以 select 像这样的直方图:

magick 0N9iv.png +dither -remap palette.png -format %c histogram:info:-

示例输出

81: (0,0,0,255) #000000FF black
22: (126,126,126,255) #7E7E7EFF gray
28270: (144,238,144,255) #90EE90FF LightGreen
4523: (255,255,255,255) #FFFFFFFF white