python - 使用光流计算实际速度

标签 python image-processing opencv opticalflow

如何使用从两个图像获得的光流信息找到物体的实际真实世界速度?谁能帮我吗?

最佳答案

正如评论员已经说过的那样,我们需要有关您的问题的更多信息。
基本上:是的,可以根据图像计算真实世界的速度

但这一切都取决于以下几点:

  • 你的相机是固定的还是可能移动的
  • 您是否尝试计算在场景中任何位置移动的任何物体的速度,或者您是否有固定车道,例如用安装的摄像机拍摄的街道,并且物体(汽车)将始终沿着一条车道移动?
  • 如果是后者,你能在现实世界的街道上进行测量吗?就像在木板路上标记点(永久或简单地找出在现实世界中 x 米的距离会在您的相机图像上显示多长时间(以像素为单位)
  • 如果您无法在现实世界场景中进行这些测量,则需要提供有关相机与场景/地平面的角度、相机与场景的距离以及相机参数的信息。

  • 为了计算场景中任何被跟踪对象的速度,您可能需要所有后者来真正计算场景中的距离。但这要困难得多。

    如果您有固定车道的情况,即想要测量汽车的速度,我更喜欢在现实世界中测量或标记点的方法。

    因为如果有这些信息:
    x m = y px
    

    并且一个对象已移动 y pxt时间(你可以通过计算的刷新率得到那个时间)你可以计算出它在 1 秒内移动了多少像素,因为你知道一米有多少像素,你就会知道它的速度,单位是米每秒(或任何您喜欢的其他单位。

    您也可以在场景中设置两个标记,然后简单地测量对象从一个标记移动到另一个标记需要多少帧(以及因此需要多少时间)。这将为您提供更平均的速度,因为如果您以较小的时间步长进行计算,您可能会由于分段问题或仅仅因为在较短的测量时间跨度之间的变化相当小而得到嘈杂的结果。

    好吧,对于分割,您可以简单地尝试减法。彼此减去两个或三个后续帧。移动对象(以及因此发生变化的图像部分)将产生非零值,而稳定图像部分的颜色值应减去大约 0。

    也许这可以帮助您解决问题...但是当然这取决于您的设置和您想要的目标...然后您需要提供更多信息...

    关于python - 使用光流计算实际速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4918494/

    相关文章:

    python - Mysql python 不插入数据

    python - 动态事件条件

    python - 运行 python cgi 脚本解释器结果因浏览器而异

    opencv - "Image Recognition"功能太多

    c++ - GrabCut 算法中发生了什么

    python - 并行运行一个又一个 exe

    android - Android Studio 中的 OpenCV - Haar Cascade - 如何检查是否检测到图像

    Java:使用AffineTransform缩放图像时出现线条

    c - 错误: Bad argument < Array should be CvMat or IplImage>

    OpenCV gpu::dft 逆变换后的失真图像