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

时间:2018-08-22 20:01:17

标签: python opencv image-processing text-recognition color-detection

我想在实时视频中检测5-6米高的彩色文本。这些文字的宽度接近30-40厘米。我已经使用了几种方法。例如,一种是HSV来检测颜色。但这是没有用的,因为当环境照度变化时,HSV值应会变化。此外,它无法检测30厘米后的颜色。我也在寻找用于文本识别的OCR。为了进行研究,人们说我应该为此任务使用颜色检测,因为它比OCR更容易。同样,对于期望的结果就足够了。

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

example image

1 个答案:

答案 0 :(得分: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()

结果:

enter image description here

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

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