我在python的opencv库中使用一个函数来获取手的光流移动。具体来说http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html#calcopticalflowfarneback
此函数输出一个numpy数组
flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
print flow.shape # prints (480,320,2)
r,c,d = flow.shape
flowprime = numpy.zeros((r,c),flow.dtype)
for i in range(0,r):
for j in range (0,c):
flowprime[i,j] = numpy.linalg.norm(flow[i,j], 2)
print(numpy.linalg.norm(flowprime, 1))
for x in numpy.nditer(flow, op_flags=['readwrite']):
print x
最佳答案
从numpy版本1.9开始,norm
采用axis
参数。
除此之外,说出理想的想法,几乎可以肯定地说,您可以要求numpy
做到这一点。例如,假设没有复杂的条目或缺少值,最简单的情况np.sqrt((flow**2).sum())
或我认为您描述np.linalg.norm(np.sqrt((flow**2).sum(axis=-1)),1)
的情况。
https://stackoverflow.com/questions/27277730/