【发布时间】:2012-09-27 18:09:10
【问题描述】:
我正在尝试做这样的事情: http://www.youtube.com/watch?feature=player_embedded&v=MIYt1yNwoZU
而且我的方法是正确的,它可以很好地进行 2 小时的编码。但我有一个问题:
我使用的是 opencv 2.4,有一些选项可供选择。请参阅 here。哪一个是最好的? lucas kanade 有一些自动特征检测?或者也许一个简单的全球定位就足够了?甚至卡尔曼滤波器?现在我正在使用密集的 farneback 算法,我认为这是第一个(= 更简单)选项,但可能不是最好的。
-
在计算图像上的光流后(为了计算光流而缩小 2 倍,因为这是一项艰苦的工作),我取向量的平均值。正常平均值,将所有这些相加并除以向量的数量。所以在流垫上有一个嵌套的for循环。更好的方法?
Point2f average_motion(0,0); float n=1; for(int y = 0; y < flow.rows; y += step) for(int x = 0; x < flow.cols; x += step) { const Point2f& fxy = flow.at<Point2f>(y, x); if( abs(fxy.x) > threshold || abs(fxy.y) > threshold) { average_motion += fxy; n++; } } average_motion *= 1/n; average_motion *= 1/n; cout << average_motion << endl; 我正在移动矩形,但向右/向左移动似乎有点奇怪,而向上/向下移动真的很好!谁能解释一下为什么?
翻译没问题,但我被困在旋转中……如果我得到平均向量,我怎么能得到度数?我尝试过使用 X 轴的向量之间的角度,但效果不佳。有什么提示吗?
1234563
【问题讨论】:
-
您是否尝试过使用姿势估计函数来获得旋转/平移?也许estimateRigidTransform?
标签: opencv opticalflow