我如何(非常近似地)概括基于它的 CMYK 或 RGB 数字的颜色名称?

How do I (very approximately) generalize the name of the color based in it's CMYK or RGB numbers?

我正在逐像素处理图像,我需要获取每个像素的颜色名称。我有这些主要的颜色名称:黄色、品红色、青色、红色、绿色、蓝色、白色、黑色。 我还有每个像素的 RGB 和 CMYK 编号。我如何根据这些数字将像素的颜色近似为上述颜色之一?它不需要精确,只是一个非常一般的近似值。我可以用 RGB 或 CMYK 做任何数学运算来确定吗?我宁愿选择一个简单的解决方案而不是一个精确的解决方案。

让我们以此作为起始图像:

现在,制作一张我们想要寻找的所有颜色的地图,记住 ImageMagick 使用 X11 颜色名称,其中 green 被命名为 lime:

magick xc:black xc:white xc:red xc:lime xc:blue xc:cyan xc:magenta xc:yellow +append map.png

这使得这个 - 我已经放大了,因为它只有 8 像素宽和 1 像素高:

现在,我们只需要 imageMagick 将帕丁顿熊中的所有像素映射到我们地图中颜色最接近的任何颜色:

magick paddington.png +dither -remap map.png result.png

现在我们看一下结果的颜色图中像素的分布:

magick identify -verbose result.png | grep -A9 Histogram

输出

Histogram:
 78839: (  0,  0,  0) #000000 black
 15057: (  0,  0,255) #0000FF blue
     1: (  0,255,  0) #00FF00 lime
 22422: (  0,255,255) #00FFFF cyan
 18103: (255,  0,  0) #FF0000 red
    11: (255,  0,255) #FF00FF magenta
  5809: (255,255,  0) #FFFF00 yellow
 19758: (255,255,255) #FFFFFF white

而且我们可以看到在 400x400 中有 78839 个像素是黑色的,15057 个像素是蓝色的……等等。

请注意,您可以使用 wand 完成所有这些操作,它是 Python 绑定到 ImageMagick

虽然发布的其他解决方案适用于已知名称,但请查看 this 之类的模型和论文,以实际概括和理解如何将(甚至)未知颜色翻译成有用的名称。

编辑:尽管这不是 OP 想要的,但我最终还是花了几个小时将其连接起来以便在 Docker/VSCode 内轻松工作。请参阅 here 以了解快速起床的方法和 运行 此存储库。

希望对大家有所帮助!