ImageMagick:我如何处理直方图结果?

Ale*_*ndr 3 imagemagick

我获取图像中最现有的颜色并使用“直方图”功能显示它,例如

convert image.jpg  -scale 100x100 -gravity \
center -crop 50% -dither None -remap color_map.gif \
-format %c histogram:info:

    22: (  0,  0,  0) #000000 black
   881: (119,133,142) #77858E rgb(119,133,142)
   268: (186, 84, 29) #BA541D rgb(186,84,29)
   662: (212,212,212) #D4D4D4 grey83
    20: (244,203, 98) #F4CB62 rgb(244,203,98)
   647: (255,255,255) #FFFFFF white
Run Code Online (Sandbox Code Playgroud)

我现在可以使用此输出吗?我想在我的数据库中保存最现有的颜色,但我现在不知道如何获得编号为 881 的颜色。有人可以帮助我吗?

pen*_*dor 5

如果您想完全从 shell 执行此操作(假设类似 Bash 的 Unix 环境),则可以使用以下方法:

convert image.jpg -scale 100x100 -gravity center \
  -crop 50% -dither None -remap color_map.gif \
  -format %c histogram:info: | sort | tail -n1 | \
  sed -e 's/.*\(#[0-9A-F]\+\).*/\1/'
Run Code Online (Sandbox Code Playgroud)

这需要 ImageMagick 的输出,对其进行排序,以便最大的颜色计数位于底部,仅获取该行,然后从该行中提取颜色十六进制。如果您的目标是获得十进制 rgb 值而不是十六进制值,则可以调整 sed 正则表达式。

因此,对于您的示例图像,输出应该是:

#77858E
Run Code Online (Sandbox Code Playgroud)