Я думаю, что главная проблема для вас, чтобы найти хороший путь пикселей следовать от одного конца вашей кривой на другую. После того, как вы решите этот путь, вы можете просто следить за ним и проверять цвета пикселей по мере продвижения.
В настоящее время я предлагаю вам ввести путь самостоятельно, указав набор путевых точек. Вот код для вашего примера. Я занял первое место на левом фиолетовом диске, второй - под углом, а последний - на нижнем правом фиолетовом диске.
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
Он печатает:
['Purple', 'Cyan', 'Purple', 'Cyan', 'Purple', 'Cyan', 'Purple', 'Cyan', 'Purple', 'Cyan', 'Purple', 'Cyan', 'Purple', 'Cyan', 'Purple', 'Cyan', 'Purple']
Для вашего большого изображения, вы можете ввести все путевые точки вручную. Или попробуйте сделать смарт-кусок кода, чтобы найти их автоматически;)
Немного непонятно, что именно вы пытаетесь сделать. Пожалуйста, покажите код? Каков источник этого изображения? –
А, ладно, я добавлю какой-нибудь код и попытаюсь развернуть, не задумываясь, давая мне минуту. –
Я заинтригован :-) Можете ли вы сказать, что делаете с такими вещами - что их генерирует и как вы их используете? –