Opencv 视频中的速度和加速度测量

Opencv 视频中的速度和加速度测量,opencv,processing,velocity,frames,units-of-measurement,Opencv,Processing,Velocity,Frames,Units Of Measurement,我试图找到一种方法来计算被跟踪物体的速度和加速度,比如说一个落下的球。我正在使用Processing 2制作这个程序,我知道相机到物体的距离,它可以计算出运动过程中每一帧的位置 为了计算速度,我使用了这个公式(全部以像素计算):VelocityX=(PositionX-LastPositionX)/delta-time 与加速度类似:加速度x=(VelocityX-LastVelocityX)/增量时间 然后,我用帧更改了增量时间。现在我有了每帧像素的速度和加速度,但我的问题是如何将每帧像素单位

我试图找到一种方法来计算被跟踪物体的速度和加速度,比如说一个落下的球。我正在使用Processing 2制作这个程序,我知道相机到物体的距离,它可以计算出运动过程中每一帧的位置

为了计算速度,我使用了这个公式(全部以像素计算):VelocityX=(PositionX-LastPositionX)/delta-time

与加速度类似:加速度x=(VelocityX-LastVelocityX)/增量时间

然后,我用帧更改了增量时间。现在我有了每帧像素的速度和加速度,但我的问题是如何将每帧像素单位转换为mm/s?更直观的单位

我也以像素为单位计算位置,但在那之后我转换成mm,但我有点搞不清楚如何计算速度和加速度

//获取当前时间
currTime=帧数;
deltaTime=(currTime-prevTime);
//记住下一帧的当前时间
prevTime=currTime;
//计算X和Y方向的速度(像素/帧)
if(lastMovingX!=Float.MAX_值){
velX=(PX-lastMovingX)/deltaTime;
velY=(PY-lastMovingY)/deltaTime;
}
//保存当前帧位置以便下次计算
lastMovingX=PX;
lastMovingY=PY;
如果(lastVelX!=浮点最大值){
accelX=(velX-lastVelX)/deltaTime;
加速度=(最后一次)/延迟时间;
}
lastVelX=velX;
最后的=最后的;

如果知道对象的大小,可以提取像素/毫米的比率。如果知道帧速率,可以将帧转换为秒

查找像素/mm=对象大小(以像素为单位)/对象大小(以mm为单位)

(像素/帧)/(像素/毫米)=毫米/帧

毫米/帧*帧/秒=毫米/秒


这就是您要找的吗?

没有标准的方法,因为这完全取决于用户在哪个屏幕上显示。手机上的100像素与投影仪上的100像素将是非常不同的测量单位(毫米)。为什么你认为你需要转换成毫米?这个单位的测量对于我的项目是必要的,所以用户可以用更熟悉的单位来理解结果。你建议怎么做才能做到这一点?我的屏幕是640x480像素。我介绍了从相机到物体的距离。啊,我误解了你的问题。您希望以毫米为单位跟踪对象,而不是在屏幕上绘制的对象。这是计算机视觉的问题,而不是具体的处理问题。这也可能取决于你使用的相机类型(例如,鱼眼镜头和长焦镜头会给你非常不同的结果)。你可能会在一个计算机视觉论坛上发帖。关于计算机视觉的所有部分都完成了,我唯一缺少的是如何将每帧单位的像素转换为mm/s。我使用的是一个每秒30帧的网络摄像头。从像素到真实世界单位的转换是一个计算机视觉问题。这也将取决于你使用的镜头类型。在StackOverflow上很难找到那种专门的专业知识,这就是为什么你可能想找一个计算机视觉论坛的原因。如果你这样做的话,请确保在交叉柱之间建立链接。祝你好运对我正在寻找这个,我有点困惑我应该采取的方法,感谢澄清。我会用这个测试结果,然后让你知道它是否有效。