单层(稀疏)光流法的过程
1、寻找GFTT角点
2、对于每个角点、每次迭代,使用8x8窗口计算:
(1)求误差
(2)求雅可比(源码中多处添加负号,不直观,下面附的代码已经修改为书上公式的直观表达)
(3)求H、b
(4)求解增量方程,更新优化变量,重复循环
其中,源码中并没有直接使用某点的像素深度,而是使用2x2窗口进行局部平滑处理后的像素深度。对于opencv的光流法,好像是先对图像进行全局平滑处理,再取像素深度
另外,源码的单层光流法并没有假定8x8窗口的像素都具有相同运动,对于下一节的多层光流法却是假定了相同运动
注意事项
编译本节代码需要使用 opencv4,安装和使用的注意事项参考 https://blog.youkuaiyun.com/floatinglong/article/details/117173740
对于下面这种找不到 CV_GRAY2BGR 的错误,原因在于新版的 opencv 修改了它的名字
error: ‘COLOR_GRAY2BGR’ was not declared in this scope
将代码中的 CV_GRAY2BGR 改为 COLOR_GRAY2BGR 即可
对于找不到 COLOR_GRAY2BGR 的错误,原因可能在于没有引用作用域,在代码头部添加
using namespace cv;
直接运行代码可能会出现错误,提示没有安装 libgtk2.0-dev and pkg-config,使用apt安装,重新对opencv进行配置编译安装即可(删除CMakeCache.txt,重新编译不会花太长时间,因为只是更改某些配置项,不需要全部重新编译)
sudo apt install libgtk2.0-dev pkg-config
#include <iostream>
#include <string>
using namespace std;
//#include <list>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
using n

本文详细介绍了单层光流法的实现过程,包括寻找GFTT角点,使用8x8窗口进行迭代优化,计算误差、雅可比矩阵、H和b,并求解增量方程。代码中针对opencv的光流法进行了平滑处理和局部深度处理。注意到源码中存在一些错误,如名称未声明和缺少引用作用域。此外,还提到了并行计算可能导致的随机错误。文章提供了代码示例和解决编译问题的方法。
最低0.47元/天 解锁文章
1457





