首页 > 解决方案 > 我如何(非常近似地)根据它的 CMYK 或 RGB 数字概括颜色的名称?

问题描述

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

标签: image-processingcolorsrgbcmyk

解决方案


让我们以此为起始图像:

在此处输入图像描述

现在,制作一张我们要查找的所有颜色的地图,记住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将 Paddington 中的所有像素映射到我们地图颜色中最接近的颜色:

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来完成所有这些操作。


推荐阅读