OpenCV中稀疏光流的特征点轨迹跟踪

发布时间:2026/9/3 7:02:35
OpenCV中稀疏光流的特征点轨迹跟踪 一、介绍在计算机视觉中光流是描述图像中像素运动速度与方向的“矢量场”。本次将详细拆解一段基于 OpenCV 实现Lucas-Kanade 金字塔光流的代码。它会在视频第一帧锁定 100 个强角点然后在后续每一帧中追踪这些点的运动轨迹最终在画面上绘制出五彩缤纷的运动路径。二、核心讲解1.稀疏光流稠密光流计算图像中每一个像素的运动矢量计算量大但信息全。稀疏光流只计算图像中部分显著特征点的运动矢量。2.Lucas-Kanade算法LK算法基于三个核心假设亮度恒定同一个像素点在运动前后它的灰度值保存不变。小运动目标在帧间的偏移量很小。空间一致性一个像素点周围的领域内所有像素的运动方向相同。3.为什么需要图像金字塔maxLevel2如果物体运动太快每帧移动超过 20 个像素LK 算法就会失效。图像金字塔将原始图像逐层缩小分辨率降低在顶层小图像上大运动变成了小运动算出一个粗略的运动矢量再逐层向下细化从而能够追踪快速移动的目标。三、核心代码讲解1.初始化加载视频与随机颜色随机生成 100 组 RGB 颜色取值范围 0~255。由于我们有 100 个特征点每个点会分到一种颜色用于绘制独一无二的轨迹线。2.第一帧预处理与角点检测maxCorners100最多检测100个点qualityLevel0.3只接受响应值大于最大响应值30%的角点minDistance7角点之间至少相隔7个像素避免扎堆。goodFeaturesToTrack 是 OpenCV 中一个专门用来寻找图像中“强角点”的函数先在一张图片里找到 100 个最难被混淆、最容易被认出来的“地标建筑角点”然后后面的光流算法只需要盯着这 100 个地标去追踪就行了。3.创建画板和LK光流参数配置创建一个和原图尺寸相同的全黑三通道图像用来专门绘制历史轨迹线段。winSize(15,15)搜索窗口大小窗口越大对运动越鲁棒但随之而来的是计算量增加且容易破坏边缘细节。maxLevel2构建3层0,1,2)图像金字塔能追踪速度较快的物体。4.计算稀疏光流输入前一帧灰度图、当前帧灰度图、前一帧的特征点(p0)。输出p1当前帧中匹配到的特征点坐标。st:状态向量(1表示追踪成功0表示丢失比如点跑出画面或被遮挡。err:追踪误差(值越大越不可靠)。5.绘制五彩轨迹线zip(good_new,good_old)将新旧点一个一个配对。color[i].tolist()将color参数转换为列表。每画一条线就更新一次mask而且所有之前的轨迹都保留形成长尾。四、总结本次的计算机视觉的操作完美展示了稀疏光流跟踪流程角点提取——金字塔LK跟踪——状态过滤——轨迹渲染——迭代更新。