Выделение цветных текстовых областей в видеопотоке
Я хочу обнаружить красочные тексты с высоты 5-6 метров в живом видео. Ширина этих текстов составляет почти 30-40 см. Я использовал несколько методов. Например, одним из них является HSV для обнаружения цветов. Но это бесполезно, поскольку значение ВПГ должно меняться при изменении освещения окружающей среды. Кроме того, он не может обнаружить цвета после 30 см. Также я искал OCR для распознавания текста. Что касается моего исследования, люди говорят, что для этой задачи я должен использовать определение цвета, так как это проще, чем OCR. Также этого достаточно для желаемого результата.
В общем, как я могу обнаружить красные и зеленые тексты на расстоянии от 5 до 6 метров в потоке живого видео, даже если эта операция применяется в помещении или на улице?
1 ответ
Это скорее предложение для возможного пути продвижения вперед, чем решение, но одной мыслью было бы изучить совокупный оттенок каждой строки в изображении.
Зеленый цвет (верхняя метка) имеет значение оттенка ~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()
Результат:
График имеет высокие значения влево и низкие значения вправо, предполагая, что зеленый текст находится вверху изображения, а красный текст внизу изображения.
Вам нужно будет транспонировать матрицу изображения и найти значения оттенков по столбцам, если одна из меток находится на левой / правой стороне изображения, но, надеюсь, это может стимулировать ваши идеи...