from PIL import Image
from numpy import array, arange
im = Image.open("aqoGkjs.png")
rgb_im = im.convert('RGB')
def get_color_at(p): # color function as mattsap suggested
r, g, b = rgb_im.getpixel(tuple(p))
if r > g and r > b:
return 'Purple'
elif r < 10 and g < 10:
return 'Blue'
return 'Cyan'
colors = []
via_points = [array([25, 65]), array([185, 44]), array([240, 210])]
for i in xrange(len(via_points) - 1):
for x in arange(0, 1, 0.01):
p = x * via_points[i] + (1 - x) * via_points[i + 1] # linear interpolation
cur_color = get_color_at(p)
if cur_color == 'Blue': # ignore borders
continue
if not colors or cur_color != colors[-1]:
colors.append(cur_color)
print colors
#find RGB values
rgb_values = []
for point in line:
r, g, b = rgb_im.getpixel(point)
rgb_values += [ (r,g,b)]
#remove similar adjacent values
for i in range(len(rgb_values)-1):
if rgb_values[i] == rgb_values[i+1]:
rgb_values.pop(i)
i -= 1
if len(rgb_values) > 1:
if rgb_values[-1] == rgb_values[-2]:
rgb_values.pop(-1)
我认为你的主要问题是找到一条好的像素路径,从曲线的一端到另一端。一旦你决定了这条路,你就可以跟着它,并检查像素颜色。在
现在,我建议您自己通过指定一组航路点来输入路径。下面是一些代码用于示例图。我把第一个点放在左边的紫色圆盘上,第二个点在角度上,最后一个点在右下角的紫色圆盘上。在
它打印:
^{pr2}$对于你的大图像,你可以手工输入所有的航路点。或者尝试编写一段智能代码来自动找到它们;)
只需沿行创建一个RGB值列表,然后过滤该列表以删除类似的相邻值。在
Get pixel's RGB using PIL
相关问题 更多 >
编程相关推荐