对 python 中的 RGB 值进行分类
Classifying RGB values in python
使用枕头
im = Image.open("GameShot.png");
pix = im.load();
PixelColor = pix[x,y]
if PixelColor == green:
# do stuff
我的问题
pix[x,y]
returns 一个 RGB 值,在我的图像中,我正在寻找的颜色不会保持不变。
- 要么我需要找到一种新的方法来做到这一点。
- 或者我需要一种概括颜色的方法。
您需要某种函数来将 RGB 值分类为属于特定颜色。
接近这个的一个简单方法是为您要考虑的每种颜色定义一个特定值(在您的情况下,红色和绿色,正如您在下面的评论中所说),然后计算 manhattan distance 在您的 RGB 值和每个点之间。然后你可以选择距离最小的点并说你的像素属于那个颜色。
这将适用于您指定的任意数量的颜色,虽然它可能并不总是 100% 准确,但作为第一近似值已经足够好了。
注意:我无法访问 Pillow,所以我不确定什么数据结构 im.load() returns。我正在使用 (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
使用枕头
im = Image.open("GameShot.png");
pix = im.load();
PixelColor = pix[x,y]
if PixelColor == green:
# do stuff
我的问题
pix[x,y]
returns 一个 RGB 值,在我的图像中,我正在寻找的颜色不会保持不变。
- 要么我需要找到一种新的方法来做到这一点。
- 或者我需要一种概括颜色的方法。
您需要某种函数来将 RGB 值分类为属于特定颜色。
接近这个的一个简单方法是为您要考虑的每种颜色定义一个特定值(在您的情况下,红色和绿色,正如您在下面的评论中所说),然后计算 manhattan distance 在您的 RGB 值和每个点之间。然后你可以选择距离最小的点并说你的像素属于那个颜色。
这将适用于您指定的任意数量的颜色,虽然它可能并不总是 100% 准确,但作为第一近似值已经足够好了。
注意:我无法访问 Pillow,所以我不确定什么数据结构 im.load() returns。我正在使用 (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