【发布时间】:2015-08-03 09:57:50
【问题描述】:
我正在尝试找到一种方法来计算被跟踪物体的速度和加速度,比如说一个球落下。我正在使用 Processing 2 来制作这个程序,我知道相机到物体的距离,它可以计算出它在运动过程中每一帧的位置。
为了计算速度,我使用了这个公式(全部以像素计算):VelocityX=(PositionX - LastPositionX)/delta time
与加速度类似:AccelerationX=(VelocityX - LastVelocityX)/delta time
然后,我用帧更改了增量时间。所以现在我有每帧像素的速度和加速度,但我的问题是如何将每帧像素单位转换为毫米/秒?到更直观的单位。
我也以像素为单位计算位置,但之后我转换为毫米,但我对如何为速度和加速度进行转换有点困惑。
// Get the current time
currTime = frameCount;
deltaTime = (currTime - prevTime);
// Remember current time for the next frame
prevTime = currTime;
// Calculate velocity in X and Y directions (pixels / frame)
if (lastMovingX != Float.MAX_VALUE) {
velX = (PX - lastMovingX) / deltaTime;
velY = (PY - lastMovingY) / deltaTime;
}
// Save the current frame position for the next calculation
lastMovingX = PX;
lastMovingY = PY;
if (lastVelX != Float.MAX_VALUE) {
accelX = (velX - lastVelX) / deltaTime;
accelY = (velY - lastVelY) / deltaTime;
}
lastVelX = velX;
lastVelY = velY;
【问题讨论】:
-
没有标准的方法来做到这一点,因为它完全取决于用户在哪个屏幕上显示。手机上的 100 像素与投影仪上的 100 像素将以毫米为单位的测量值将非常不同。为什么您认为需要转换为毫米?
-
这个单位的测量对我的项目来说是必要的,所以用户可以理解更熟悉的单位的结果。你建议怎么做才能做到这一点?我的屏幕是 640x480 像素。并且我介绍了相机到物体的距离。
-
啊,我误解了你的问题。您希望以毫米为单位跟踪对象,而不是您在屏幕上绘制的对象。对于计算机视觉来说,这更像是一个问题,而不是专门针对处理的问题。这也可能取决于您使用的相机类型(例如,鱼眼镜头与长焦镜头会给您带来非常不同的结果)。在计算机视觉论坛上发帖可能会更好。
-
关于计算机视觉的所有部分都已完成,我唯一缺少的是如何将每帧单位的像素转换为 mm/s 。我正在使用 30fps 网络摄像头。
-
从像素转换为现实世界的单位是一个计算机视觉问题。这也取决于您使用的镜头类型。在 StackOverflow 上很难找到这种类型的专业知识,这就是为什么您可能想要寻找计算机视觉论坛的原因。如果您这样做,请确保在交叉帖子之间建立链接。祝你好运!
标签: opencv processing velocity frames units-of-measurement