我想在现场视频中检测5-6米高的彩色文本。这些文本的宽度接近30-40厘米。我使用了一些方法。例如,一种是HSV来检测颜色。但由于HSV值应在环境照明更改时更改,因此该选项没有什么用处。此外,它不能检测超过30厘米的颜色。此外,我还寻找了用于文本识别的OCR。为了我的研究,人们说我应该使用颜色检测来完成这项任务,因为它比OCR更容易。而且,对于期望的结果来说,这是足够的。
总而言之,即使在室内或室外环境中,如何检测直播视频流中5-6米外的红色和绿色文本?
发布于 2018-08-22 23:01:43
这更多的是一种可能的前进方式的建议,而不是解决方案,但一种想法是检查图像中每一行的聚合色调。
绿色(顶部标签)的色调值为~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()
结果:
该图的左侧具有较高的值,而向右具有较低的值,这表明绿色文本位于图像的顶部,红色文本位于图像的底部。
如果其中一个标签位于图像的左侧/右侧,则需要转置图像矩阵并找到按列显示的色调值,但希望这能激发您的想法……
https://stackoverflow.com/questions/51974279
复制相似问题