python - 如何在 15 帧的时间窗口的密集光流中找到特征点(某些像素)的速度?
问题描述
我想使用 Farneback Dense 光流跟踪每个像素作为 15 帧时间窗口的特征点。使用 flow=cv2.calcOpticalFlowFarneback(prvs,next,None,0.5,3,15,3,5,1.2,0) ,它显示了前一帧中每个像素的 dx 和 dy。在这里,我想跟踪 15 帧以上的某个特征点像素并找到该特征点的速度。
如何通过具有一系列空间位置的特征点随时间的轨迹长度 L 的密集光流来估计速度?
解决方案
你已经有了 dx 和 dy。有了这些信息,如果你知道时间,你总是可以知道这个像素的速度t
。
vx = dx / t
vy = dy / t
dx 和 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
我希望这对您有所帮助,如果没有,请发表评论。
推荐阅读
- javascript - 如何使用 dateDropper 插件格式化日期
- python - 我有 2 个组合框(comboBox_1,comboBox_2)comboBox_1 并用正确的数据填充组合框_2
- javascript - 如何检查firestore中的querySnapshot是否为空
- python-3.x - apache TinkerPop gremlin 如何从路径结果中过滤起始顶点
- visual-studio-code - VS Code 构建任务:“cd”命令不起作用
- c# - 如何设置定时器间隔?
- python - Python 版本清理
- c# - 使用 Ef core 3.1 从 Db 获取相关数据
- php - 如何使用 HTTP 请求或 PHP 中的 Guzzle 客户端通过请求的页面获取最后一个重定向页面
- xamarin.android - 使用 ocr 时打开手电筒时应用程序崩溃