我想在实时视频中检测5-6米高的彩色文本。这些文字的宽度接近30-40厘米。我已经使用了几种方法。例如,一种是HSV来检测颜色。但这是没有用的,因为当环境照度变化时,HSV值应会变化。此外,它无法检测30厘米后的颜色。我也在寻找用于文本识别的OCR。为了进行研究,人们说我应该为此任务使用颜色检测,因为它比OCR更容易。同样,对于期望的结果就足够了。
总而言之,即使在室内或室外环境中执行此操作,如何在5到6米远的实时视频流中检测红色和绿色文本?
答案 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()
结果:
该图的左侧是高值,右侧是低值,这表明绿色文本位于图像的顶部,红色文本位于图像的底部。
如果其中一个标签位于图像的左侧/右侧,则需要转置图像矩阵并找到按列的色相值,但希望这可以激发您的想法...