【问题标题】:How to extract velocity vectors from dense optical flow?如何从密集光流中提取速度向量?
【发布时间】:2009-12-10 00:42:12
【问题描述】:

问题:我正在尝试对齐移动视频的两帧。

我目前正在尝试使用函数“cvCalcOpticalFlowLK”,结果以“CvArr”的形式输出 x 和 y 的速度向量。

所以我得到了结果,但是我不确定如何使用这些向量数组。

我的问题是……我怎么知道每个像素的速度是多少?它只是那个特定点的每个像素值的值吗?

注意:我会使用其他光流函数,例如 cvCalcOpticalFlowPyrLK(),因为它更容易,但我想要密集的光流。

【问题讨论】:

  • 所以我一直在玩弄生成的图像,我假设每个像素值代表每个像素的速度,但是精确测量的单位是什么?有谁知道这些“速度值”如何对应于该像素的速度?它是每帧像素吗?或者是其他东西?每个像素的值都是 32 位浮点数。

标签: opencv opticalflow


【解决方案1】:

显然我最初的假设是正确的。光流函数的“velx”和“vely”输出是每个像素值的实际速度。为了最好地提取它们,我从原始数据中访问了像素并提取了值。有两种方法可以做到这一点。

cvGet2D() -- 这种方式比较慢,但是如果你只需要访问 1 个像素就可以了。

(uchar*)(image->imageData + height*image->widthStep + width);

(image是一个IplImage,width和height就是图片对应的宽高)

【讨论】:

    【解决方案2】:

    如果您需要每个像素的运动矢量,那么您需要计算所谓的“密集光流”。从 openCV 2.1 开始,有一个函数可以做到这一点:calcOpticalFlowFarneback。

    查看以下链接: http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html?highlight=calcopticalflowfarneback#cv2.calcOpticalFlowFarneback

    【讨论】:

      【解决方案3】:

      velx 和 vely 是光流而不是实际速度。 您使用的方法已过时。使用这个calcOpticalFlowFarneback()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        相关资源
        最近更新 更多