【问题标题】:Color classification library [closed]颜色分类库[关闭]
【发布时间】:2011-10-14 09:16:16
【问题描述】:

状态:I am developing my own library


问题:

有没有可以做颜色分类的库?

我想象的工作流程是这样的:

>>> import colorclassification
>>> classifier = colorclassification.Classifier
>>> color = classifier.classify_rgb([255, 255, 0])
['yellow']
>>> color = classifier.classify_rgb([255, 170, 0])
['orange']

该库不一定适用于 python。我可以查看模块/库源代码的任何语言都可以。

【问题讨论】:

  • 我根据您的示例代码标记了这个 Python。请在将来使用语言/平台进行标记,以便人们实际上可以给出相关答案。 [colors] 本身可以适用于大量种语言,而且根本不够具体,无法确定您的问题的上下文。
  • 我不喜欢 python。现在我根本找不到任何东西,如果我能获得任何可以做到这一点的图书馆的链接,那将很有价值。

标签: python colors python-3.x


【解决方案1】:

您可以做到这一点的一种方法是找到“最接近”的颜色。假设我们有一个颜色集合,它不必涵盖所有 16777216 个可能的 rgb 值,甚至不需要在 rgb 中,但为了简单起见,它可能看起来像这样:

colors = {'red': (255,0,0),
          'green': (0,255,0),
          'blue': (0,0,255),
          'yellow': (255,255,0),
          'orange': (255,127,0),
          'white': (255,255,255),
          'black': (0,0,0),
          'gray': (127,127,127),
          'pink': (255,127,127),
          'purple': (127,0,255),}

让我们定义一个机制,通过“最接近”的颜色来告诉我们真正的意思。在这种情况下,我将使用简单的笛卡尔距离,但任何可以比较两种颜色的相似度都可以。

def distance(left, right):
    return sum((l-r)**2 for l, r in zip(left, right))**0.5

class NearestColorKey(object):
    def __init__(self, goal):
        self.goal = goal
    def __call__(self, item):
        return distance(self.goal, item[1])

这实际上就是我们所需要的。我们可以使用内置的min()(如果您的相似度函数返回更高的值以获得更相似的颜色,则可以使用最大值)

>>> min(colors.items(), key=NearestColorKey((10,10,100)))
('black', (0, 0, 0))
>>> min(colors.items(), key=NearestColorKey((10,10,200)))
('blue', (0, 0, 255))
>>> min(colors.items(), key=NearestColorKey((100,10,200)))
('purple', (127, 0, 255))
>>> 

【讨论】:

  • 如果您最终使用笛卡尔距离来比较颜色,您通常应该将输入转换为线性的、可感知的颜色空间,例如 Lab 或 Yuv。 RGB 和 HSV 都不是线性的,因此笛卡尔距离与实际上相似的两种颜色并没有太大关系。
  • 感谢您的这篇文章,这是迄今为止最相关的。但是,我刚刚完成了my library。这是一种完全不同的方法,更多的是基于条件而不是魔法,这可能是好是坏,但我会明确地为你解决,因为它比我现在的更简单,而且我有点厌倦了定义颜色范围。
  • 我已经完成了my implementation,它完美运行:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多