qt+opencv 实现光流检测

本文详细介绍了使用QT+OpenCV进行光流检测的过程,特别是calcOpticalFlowPyrLK函数的应用及参数解读。通过实例演示,展示了如何在实际场景中运用该函数,并提供了具体代码实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用QT + OPENCV 实现了光流检测;

关于calcOpticalFlowPyrLK的函数的介绍,网上不绝于耳,很多大牛都在介绍,我也借花献佛再次show一下。
void cvCalcOpticalFlowPyrLK( const CvArr* prev, const CvArr* curr, CvArr* prev_pyr, CvArr* curr_pyr, const CvPoint2D32f* prev_features, CvPoint2D32f* curr_features, int count, CvSize win_size, int level, char* status, float* track_error, CvTermCriteria criteria, int flags );
  • prev:在时间 t 的第一帧
  • curr:在时间 t + dt 的第二帧
  • prev_pyr:第一帧的金字塔缓存. 如果指针非 NULL , 则缓存必须有足够的空间来存储金字塔从层 1 到层 #level 的内容。尺寸 (image_width+8)*image_height/3 比特足够了
  • curr_pyr:与 prev_pyr 类似, 用于第二帧
  • prev_features:需要发现光流的点集
  • curr_features:包含新计算出来的位置的 点集
  • count:特征点的数目
  • win_size:每个金字塔层的搜索窗口尺寸
  • level:最大的金字塔层数。如果为 0 , 不使用金字塔 (即金字塔为单层), 如果为 1 , 使用两层,下面依次类推。
  • status:数组。如果对应特征的光流被发现,数组中的每一个元素都被设置为 1, 否则设置为 0。
  • error:双精度数组,包含原始图像碎片与移动点之间的差。为可选参数,可以是 NULL .
  • criteria:准则,指定在每个金字塔层,为某点寻找光流的迭代过程的终止条件。
  • flags:其它选项:
    • CV_LKFLOW_PYR_A_READY , 在调用之前,第一帧的金字塔已经准备好
    • CV_LKFLOW_PYR_B_READY , 在调用之前,第二帧的金字塔已经准备好
    • CV_LKFLOW_INITIAL_GUESSES , 在调用之前,数组 B 包含特征的初始坐标 (Hunnish: 在本节中没有出现数组 B,不知是指的哪一个)
说完这个,估计没啥意思,只有实际上用了才知道,如何使用才是关键,下面就是我在实际用的时候的一些见解:
calcOpticalFlowPyrLK(gray_pre, gray, gray_point_pre, gray_point_cur,status,err,Size(25,25));

----解释:
gray_pre:前一帧图
gray:当前帧图
gray_point_pre:前一帧点数据
gray_point_cur:当前帧点数据
status:返回状态
err:返回的err
Size(25,25):检测大小
-----------------------------------------
其实核心的东东就是传入gray_pre,gray,gray_point_pre,size等,只需要处理返回来的gray_point_cur内检测数据即可;
解释了这么多,不如来张图片比较实际,如下图所示:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值