我想跟踪每个像素作为特征点的时间窗口15帧使用Farneback密集光流。使用flow=cv2.calcOpticalFlowFarneback(prvs,None,0.5,3,15,3,5,1.2,0)显示了前一帧中每个像素的dx和dy。在这里,我想跟踪15帧的某些特征点像素,并找到该特征点的速度。
如何用轨迹长度L的空间位置序列特征点的密集光流来估计速度?
发布于 2019-01-15 09:38:29
你已经有dx和dy了。有了这些信息,如果你知道时间t的话,你总是可以得到这样的像素的速度。
vx = dx / t
vy = dy / tdx和dy可能是负的,所以它会保持某种方向.请记住,原点是左上角,并指向右下角。
这样,您就可以有每个像素的速度每帧每维。您可以随时跟踪像素并计算其轨迹长度并将其分割成时间,可以说是像素的平均速度在某种程度上。
为此,计算轨迹中每个点的长度:
length = sqrt(dx**2 + dy**2)并将它们添加到像素后面,我的意思是:
totalLength = length(prev1[y,x]) + length(prev2[y+prev1[y,x][1], prev2[x+prev1[y,x]][0]]) ....然后用时间除以totalLength。
如果你想要总位移的速度,我指的是从起始点到终点的速度(如果像素来回移动的话,可以是0),然后通过增加位移来跟踪像素,然后计算速度。
disp = (x,y) + prev1[y,x] + prev2[y,x] ...
speed = disp / t我希望这能对你有所帮助,如果不是这样的话,我会留下评论的。
https://stackoverflow.com/questions/54192407
复制相似问题