在python中对RGB值进行分类

时间:2016-04-06 00:25:55

标签: python python-3.x colors python-imaging-library rgb

使用枕头

im = Image.open("GameShot.png");
pix = im.load();
PixelColor = pix[x,y]
if PixelColor == green:
    # do stuff

我的问题

pix[x,y]会返回一个RGB值,在我的图片中,我正在寻找的颜色不会保持不变。

  • 要么我需要找到一种新方法来做到这一点。
  • 或者我需要一种概括颜色的方法。

1 个答案:

答案 0 :(得分:1)

您需要某种功能来将RGB值归类为属于特定颜色。

接近这一点的一个简单方法是为您要考虑的每种颜色定义一个特定值(在您的情况下,红色和绿色,如下面的评论中所述),然后计算manhattan distance在你的RGB值和每个点之间。然后你可以选择距离最近的点,并说你的像素属于那种颜色。

这适用于您指定的任意数量的颜色,虽然它可能并不总是100%准确,但它足以作为第一个近似值。

注意:我无法访问Pillow,所以我不确定im.load()返回什么数据结构。我正在使用(R,G,B)元组给出一个粗略的想法。

def classify(rgb_tuple):
    # eg. rgb_tuple = (2,44,300)

    # add as many colors as appropriate here, but for
    # the stated use case you just want to see if your
    # pixel is 'more red' or 'more green'
    colors = {"red": (255, 0, 0),
              "green" : (0,255,0),
              }

    manhattan = lambda x,y : abs(x[0] - y[0]) + abs(x[1] - y[1]) + abs(x[2] - y[2]) 
    distances = {k: manhattan(v, rgb_tuple) for k, v in colors.items()}
    color = min(distances, key=distances.get)
    return color