隔离视频流中的彩色文本区域

Isolate colored text regions in video stream

我想检测实时视频中 5-6 米高度的彩色文本。这些文字的宽度接近 30-40 厘米。我用了几种方法。例如,一种是 HSV 来检测颜色。但它没有用,因为 HSV 值应该随着环境光照的变化而变化。此外,它无法检测 30 厘米后的颜色。我还寻找 OCR 进行文本识别。为了我的研究,人们说我应该为此任务使用颜色检测,因为它比 OCR 更容易。此外,它足以达到所需的结果。

总而言之,即使在室内或室外环境中应用此操作,如何在实时视频流中检测到 5 到 6 米外的红色和绿色文本?

这与其说是解决方案,不如说是对可能的前进方向的建议,但一种想法是检查图像中每一行的总色调。

绿色(顶部标签)的色调值为 ~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()

结果:

该图左侧的值较高,右侧的值较低,表明绿色文本位于图像顶部,红色文本位于图像底部。

如果其中一个标签位于图像的 left/right 侧,则您需要转置图像矩阵并找到按列的色调值,但希望这可以激发您的想法...