获取颜色坐标不起作用的函数

时间:2019-04-14 11:53:04

标签: python

它现在正在工作,结果是:“无”

blue = [70, 238, 255]

def FindColor(color):
    image = ImageGrab.grab()
    for x in range(1, 400):
        for y in range(1,400):
            px = image.getpixel((x, y))
            if px[0] == color[0] and px[1] == color[1] and px[2] == color[2]:
                return (x, y)

FindColor(blue)

2 个答案:

答案 0 :(得分:0)

您对蓝色的定义过于精确。 我的意思是,[71,238,255](70-> 71)在我们眼中看起来是一样的,但是计算机会注意到它们之间的区别。

有一个名为pynche的程序,可以将RGB更改为英语的Python颜色名称。 https://github.com/python/cpython/blob/master/Tools/pynche/ColorDB.py

顺便说一句,也许您应该考虑使用列表,而不是只返回第一个与您的颜色匹配的协调表。

答案 1 :(得分:0)

与其直接比较颜色,不如计算它们之间的距离。

下面的代码是从here收集的。

typedef struct {
   unsigned char r, g, b;
} RGB;

double ColourDistance(RGB e1, RGB e2)
{
  long rmean = ( (long)e1.r + (long)e2.r ) / 2;
  long r = (long)e1.r - (long)e2.r;
  long g = (long)e1.g - (long)e2.g;
  long b = (long)e1.b - (long)e2.b;
  return sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}

阅读this