获取图像中的主要颜色?

Ric*_*ard 4 colors imagemagick images image-processing

是否可以从命令行获取图像中的主要颜色?理想情况下,我希望它以十六进制或 RGB 形式返回。

我认为可以使用imagemagick 的识别命令来做到这一点,但我在文档中看不到这样做的选项。

mr.*_*tic 11

Imagemagickidentify -verbose提供了一个调色板直方图表,前提是唯一颜色的数量低于限制(在我检查过的版本中为 1024,v6.x 到 v6.8.3)。

相反,您可以convert将您的图像“ ”转换为直方图,此输出不受唯一颜色数量的限制:

convert image.jpg  -format %c -depth 8  histogram:info:histogram_image.txt
sort -n histogram_image.txt | tail -1
Run Code Online (Sandbox Code Playgroud)

按第一列对输出进行数字排序,按像素颜色的频率排序。(当然,特定颜色像素的频率可能与人类对主要颜色的感知不符。)

如果您正在减少颜色,您可能可以相信通过选择抖动和/或海报化convert为您做这件事。甚至专门针对网络安全 216:

convert image.png  +dither -remap netscape:  image_websafe.png
Run Code Online (Sandbox Code Playgroud)

通过模糊、调整大小和分色的某种组合,您可能会更接近感知的主要颜色,这不是一个定义和解决的简单问题:


另请参阅以下链接dcolors,该脚本使用 Imagemagick 确定图像中的一组主要颜色,用途包括将您的桌面配色方案与您选择的桌面图像进行协调:http : //javier.io/blog/en/2015/ 09/30/using-imagemagick-and-kmeans-to-find-dominant-colors-in-images.html


小智 7

我在这里找到了这个优雅而简短的答案http://blog.endpoint.com/2011/04/determining-dominant-image-color.html

$ convert Waffle.jpg -scale 1x1\! -format '%[pixel:u]' info:-
rgb(219,166,94)
Run Code Online (Sandbox Code Playgroud)