Это скорее предложение о возможном пути вперед, чем решение, но одна мысль заключалась бы в том, чтобы изучить совокупный оттенок каждой строки на изображении.
Зеленый (верхняя метка) имеет значение оттенка ~90, а красный (нижняя метка) имеет значение оттенка ~0, поэтому, если мы вычислим сумму значений оттенка для каждой строки изображения, мы ожидаем самые зеленые строки имеют самые высокие значения оттенка, а красные строки имеют самые низкие значения оттенка.
from scipy.misc import imread
import matplotlib.pyplot as plt
from colorsys import rgb_to_hsv
%matplotlib inline
# read in the image in RGB
img = imread('vUvMl.jpg', mode='RGB')
# find the sum of the Hue, Saturation, and Value values
# for each row in the image, top to bottom
rows = []
h_vals = []
s_vals = []
v_vals = []
for idx, row in enumerate(img):
row_h = 0
row_s = 0
row_v = 0
for pixel in row:
r, g, b = pixel / 256
h, s, v = rgb_to_hsv(r, g, b)
row_h += h
row_s += s
row_v += v
h_vals.append(row_h)
s_vals.append(row_s)
v_vals.append(row_v)
rows.append(idx)
# plot the aggregate hue values for each row of the image
plt.scatter(rows, h_vals)
plt.title('Aggregate hue values for each row in image')
plt.show()
Результат:
График имеет высокие значения слева и низкие значения справа, предполагая, что зеленый текст находится вверху изображения, а красный текст находится внизу изображения.
Вам нужно будет транспонировать матрицу изображения и найти значения оттенка по столбцам, если одна из меток находится на левой/правой стороне изображения, но, надеюсь, это может подстегнуть ваши идеи...
person
duhaime
schedule
22.08.2018