2011-07-27 7 views
3

ステータス: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用であってはなりません。モジュール/ライブラリのソースコードを見ることができる言語は問題ありません。

+1

min()組み込みを使用することができます。将来、ユーザーが実際に関連する回答を出すことができるように、言語/プラットフォームにタグを付けてください。 '[colors]'それ自体は*膨大な数の言語に適用でき、あなたの質問の文脈を確立するのに十分なものではありません。 – eldarerathis

+0

私はPythonを気にしません。今のところ私は何も見つけることができません。もしそれを行うことができるライブラリへのリンクがあれば、それは価値があります。 – joar

答えて

9

これを行う方法の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),} 

実際に何をという意味でと「近い」色で表示する仕組みを定義します。この場合、私は単純なデカルト距離を使用しますが、2つの色をどれだけ似ているかを比較できるものはどれも行います。

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(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)) 
>>> 
+6

デカルト距離を使用して色を比較すると、通常、入力をLabやYuvなどのリニアな知覚色空間に変換する必要があります。 RGBもHSVも線形ではないので、デカルト距離は同様の2色にはあまり関係しません。 – SingleNegationElimination

+0

この記事をありがとう、これははるかに関連性が高いです。しかし、私は[マイライブラリ](https://github.com/jwandborg/py-color-classifier)で終わりました。これはまったく違ったアプローチであり、条件に基づいたものであり、それほど魅力的ではありませんが、それは良いものと悪いものがありますが、私の現在のものよりも単純なので、決着をつけることになります。カラー範囲。 – joar

+0

私は[私の実装](https://github.com/jwandborg/py-colorclassifier/blob/v2.0/colorclassifier.py)でやっています、それは完全に動作します:) – joar

関連する問題