光流-运动直方图 我目前正在使用OpenCV C++进行光流处理。我使用的是带有点网格的calcOpticalFlowPyrLK(=每5*5像素正方形一个兴趣点)

光流-运动直方图 我目前正在使用OpenCV C++进行光流处理。我使用的是带有点网格的calcOpticalFlowPyrLK(=每5*5像素正方形一个兴趣点),c++,opencv,image-processing,opticalflow,C++,Opencv,Image Processing,Opticalflow,以下哪种方式最好: 1) 计算每个帧的计算值(方向和距离)的直方图 2) 计算给定像素在几帧(例如100帧)期间所取值(方向和距离)的直方图 OpenCV的功能是否适合这项工作?如何将它们与calcOpticalFlowPyrLK结合使用?几个月前,我正在搜索相同的OpenCV工具。不幸的是,OpenCV不包括任何运动直方图实现。相反,您需要做的是为每个帧运行calcOpticalFlowPyrLK,并计算每个位移的方向/长度。然后,您必须自己创建/填充直方图。没有听起来那么难,相信我:)HOO

以下哪种方式最好:

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

2) 计算给定像素在几帧(例如100帧)期间所取值(方向和距离)的直方图


OpenCV的功能是否适合这项工作?如何将它们与calcOpticalFlowPyrLK结合使用?

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

HOOF First part的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);
}
const int rows=flow1.rows;
常数int cols=流量1.cols;
对于(int y=0;y
浮点值的直方图?这是怎么回事?通过量化还是线性插值。对。但是我的问题呢?请看这个答案,我也在寻找同样的答案。你有没有或者能够实现这些算法。我就是这么做的。但我正在寻找一个具有几个附加功能的好实现。谢谢你的帖子。这回答了我的问题。