OpenCV视频分析与对象跟踪C++(二)光流对象跟踪-稀疏光流、稠密光流

本文深入探讨了使用OpenCV进行对象跟踪的方法,重点介绍了稀疏光流和稠密光流技术。通过KTL算法展示了稀疏光流的跟踪过程,并提供了代码示例及实验结果。接着,文章讨论了稠密光流跟踪,同样附带了相关代码和跟踪效果展示。
摘要由CSDN通过智能技术生成

移动对象跟踪三要素:图像表示(跟踪的对象要在图像中出现)外光模型,移动模型。

稀疏光流跟踪,KTL

void calcOpticalFlowPyrLK( // 稀疏光流跟踪,KLT
 InputArray prevImg, // 要跟踪的图像,8bit
 InputArray nextImg, // 在目标图像跟跟踪 prevImg 上的 prevPts 特征点
 InputArray prevPts, // prevImg 上的特征点(光流)的坐标位置;点坐标必须是单精度浮点数
 InputOutputArray nextPts, // 如果在 nextImg 上跟踪到了 prevImg 上的 prevPts[i],则在 nextPts[i] 上保存该特征点现在的坐标,nextPts与prevPts尺寸相同
OutputArray status, // 输出状态向量(无符号char);如果相应位置的流特征被发现,向量的每个元素被设置为1,否则,被置为0.
 OutputArray err, // 跟踪时候区域误差和
Size winSize = Size(21,21), // 在每个金字塔水平搜寻窗口的尺寸。
 int maxLevel = 3, // 金字塔的高度,初始为3层
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), // 在每个金字塔层,为某点寻找光流的迭代过程的终止条件
// flags    CV_LKFLOW_PYR_A_READY , 在调用之前,第一帧的金字塔已经准备好
CV_LKFLOW_PYR_B_READY , 在调用之前,第二帧的金字塔已经准备好
CV_LKFLOW_INITIAL_GUESSES , 在调用之前,数组 B 包含特征的初始坐标 (Hunnish: 在本节中没有出现数组 B,不知是指的哪一个)
int flags = 0,
 double minEigThreshold = 1e-4 // 大量实验得出的默认值,别乱改
 );

代码:

#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include<opencv2/face.hpp>
#include<iostream>
#include<math.h>
#include <string> 
#include<fstream> 

using namespace cv::face;
using namespace cv;
using namespace std;
using namespace cv::xfeatures2d;

Mat frame, gray;//当前帧
Mat prev_gray;//前一帧
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值