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

问题描述 投票:1回答:2

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

image-processing colors rgb cmyk
2个回答
2
投票

让我们以此为起始图像:

enter image description here

现在,制作一张我们要查找的所有颜色的图,请记住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像素高:

enter image description here

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

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

enter image description here

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

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


0
投票

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

编辑:即使这不是OP想要的,我最终还是花了几个小时来将它们连接起来,以便在Docker / VSCode中轻松地工作。请参见here,以获取一种快速启动并使用此存储库的方法。

我希望这对某人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.