光流 - 运动直方图

时间:2014-04-13 09:13:40

标签: c++ opencv image-processing opticalflow

我目前正在使用OpenCV C ++开发光流。我使用了calcOpticalFlowPyrLK和一个点网格(=每个5 * 5像素正方形的一个兴趣点)。

哪种方式最好:

1)计算每个帧的计算值(方向和距离)的直方图

2)计算给定像素在几个帧(例如100)中所采用的值(方向和距离)的直方图

OpenCV的功能是否适合这项工作?我如何以与calcOpticalFlowPyrLK结合的简单方式使用它们?

2 个答案:

答案 0 :(得分:1)

几个月前我正在寻找相同的OpenCV工具。不幸的是,OpenCV不包括任何运动直方图实现。相反,您应该做的是为每个帧运行calcOpticalFlowPyrLK并计算每个位移的方向/长度。然后,您必须自己创建/填充直方图。不像听起来那么难,相信我:)

答案 1 :(得分:0)

HOOF第一部分的OpenCV实现如下:

const int rows = flow1.rows;
const int cols = flow1.cols;

for (int y = 0; y < rows; ++y)  
for (int x = 0; x < cols; ++x)
{
    Vec2f flow1_at_point = flow1.at<Vec2f>(y, x);
    float u1 = flow1_at_point[0];
    float v1 = flow1_at_point[1];
    magnitudeImage += sqrt((u1*u1) + (v1 + v1));
    orientationImage += atan2(u1, v1);
}