我正在尝试做这样的事情: http ://www.youtube.com/watch?feature=player_embedded&v=MIYt1yNwoZU
而且我走对了,它可以很好地进行 2 小时的编码。但我有一个问题:
我正在使用 opencv 2.4,周围有一些选项.. 见这里。哪一个是最好的?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 轴的向量之间的角度,但效果不佳。一些提示?
现在我正在用 opencv 绘图 api 绘制东西,但是从 2.4 开始,也有 opengl 支持.. 应该很好,但我没有找到这方面的例子..