使用枕头

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


我的问题

pix[x,y]返回RGB值,并且在我的图像中,我寻找的颜色不保持不变。


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

最佳答案

您需要某种函数将RGB值分类为属于特定颜色。

达到此目的的一种简单方法是为您要考虑的每种颜色定义一个特定的值(在您的情况下为红色和绿色,如下面的评论中所述),然后计算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

10-04 14:43