如何从密集光流中提取速度矢量?

时间:2009-12-10 00:42:13

标签: opencv opticalflow

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

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

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

(图像是IplImage,宽度和高度只是图像的相应宽度和高度)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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