flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 5, 15, 5, 5, 1.1, 0) # 输出是x,y方向的矢量
# a=print('a',flow[:,:,0])
# b=print('b',flow[:,:,1])
c=[]
def hoof(flow): # flow.shape=[720.1280.2]
l = np.zeros(6)
for idx in flow:
for j in idx:
jz=np.sqrt((j[0])**2 + j[1]**2) # 幅值
jq=np.arctan(j[1]/j[0]) # 角度
if jq >= -180 and jq < -150:
l[5] += 1
elif jq >= -150 and jq < -120:
l[4] += 1
elif jq >= -120 and jq < -90:
l[3] += 1
elif jq >= -90 and jq < -60:
l[2] += 1
elif jq >= -60 and jq < -30:
l[1] += 1
elif jq >= -30 and jq < 0:
l[0] += 1
elif jq >= 0 and jq < 30:
l[0] += 1
elif jq >= 30 and jq < 60:
l[1] += 1
elif jq >= 60 and jq < 90:
l[2] += 1
elif jq >= 90 and jq < 120:
l[3] += 1
elif jq >= 120 and jq < 150:
l[4] += 1
elif jq >= 150 and jq < 180:
l[5] += 1
return l
对得到的稠密光流结果做一个直方图统计,x横轴按照每+-30度为一个区间,将360度化分为6个区间。y数轴为次数。
这里的问题是,使用简单的for循环和if语句来完成所有这些操作需要很长时间,想问问大家有没有 简化 或者 提速 的办法?