Opencv中三个光流跟踪函数

2023-05-16

在slam里,光流跟踪判断图像中某一物体的动态性,主要包括3个函数:

1、goodFeaturesToTrack函数

作用:提取输入图像中像素级别的角点,支持harris角点和Shi Tomasi角点。

函数原型:

void goodFeaturesToTrack( InputArray image, OutputArray corners,  
                          int maxCorners, double qualityLevel, double minDistance,  
						  InputArray mask=noArray(), int blockSize=3,  
                          bool useHarrisDetector=false, double k=0.04 ); 

参数说明:

  • 第一个参数:此函数的输入参数,输入为灰度图像;
  • 第二个参数:此函数的输出参数,输出为角点,保存类型为vector或数组;
  • 第三个参数:表示函数提取到角点的数量最大值;
  • 第四个参数:表示检测到的角点的质量等级(通常是0.10到0.01之间的数值,不能大于1.0);
  • 第五个参数:表示两个角点间最小间距,以像素为单位,间距小于此像素值的像素会被合并;
  • 第六个参数:一般为cv::Mat类型,维度和输入一致,mask值为0处不进行角点检测;
  • 第七个参数:表示在计算角点时参与运算的区域大小,常用值为3,但是如果图像的分辨率较高则可以考虑使用较大一点的值;
  • 第八个参数:表示是否使用Harris角点检测,为false,则使用Shi-Tomasi角点;
  • 第九个参数:提取Harris角点用到的中间参数,一般取经验值0.04~0.06。当为Shi-Tomasi角点时,此参数不起作用;

2、cv::cornerSubPix()函数

作用:由于goodFeaturesToTrack函数提取的角点是像素级别,在slam等一些情况里应用像素级别的角点不满足精度要求,cornerSubPix()函数能将像素级角点作进一步的优化计算,使之达到亚像素级别。

函数原型:

void cornerSubPix(InputArray image,
					InputOutputArray corners, 
						Size winSize, 
							Size zeroZone, 
								TermCriteria criteria)

参数说明:

  • 第一个参数:表示输入的图像,以上两个函数输入图像必须一致;
  • 第二个参数:表示输入的角点,一般为goodFeaturesToTrack函数提取的角点,该参数也存储输出的亚像素角点;
  • 第三个参数:表示计算亚像素角点时考虑的区域边长的一半;
  • 第四个参数:表示死区的一半尺寸,值设为cv::Size(-1,-1)则表示没有这个区域;
  • 第五个参数:表示计算亚像素角点停止迭代的条件,要么是迭代数大于某个设定值,要么是精度达到某个设定值,甚至可以是它们的组合;

3、calcOpticalFlowPyrLK()函数

作用:基于图像金字塔的LK光流跟踪

函数原型:

void cv::calcOpticalFlowPyrLK	(	
InputArray 	prevImg,
InputArray 	nextImg,
InputArray 	prevPts,
InputOutputArray 	nextPts,
OutputArray 	status,
OutputArray 	err,
Size 	winSize = Size(21, 21),
int 	maxLevel = 3,
TermCriteria 	criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),
)	

参数说明:

  • 第一个参数:上一帧灰度图像,作为基准;
  • 第二个参数:用于光流跟踪的灰度图像,与上一帧灰度图像大小相同、类型一致;
  • 第三个参数:上一帧图像检测的角点;
  • 第四个参数:用于光流跟踪的灰度图像输出的角点
  • 第五个参数:表示状态向量,跟踪成功的角点设置状态为1,否则设置为0;
  • 第六个参数:输出错误向量;
  • 第七个参数:每个金字塔的搜索窗口的大小;
  • 第八个参数:表示金字塔的高度;
  • 第九个参数:指定迭代搜索算法的终止条件;

实例:

cv::goodFeaturesToTrack(
mImGrayPre, 
lastFramePoints, 
1000, 
0.01, 
8,
cv::Mat(),
3,
false, 
0.04);  

cv::cornerSubPix(
mImGrayPre, 
lastFramePoints, 
cv::Size(5, 5), 
cv::Size(-1, -1), 
cv::TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 30, 0.01));

cv::calcOpticalFlowPyrLK(
mImGrayPre, 
imGray, 
lastFramePoints, 
trackedPoints, 
state, 
err, 
cv::Size(21, 21), 
3, 
cv::TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 30, 0.01));

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Opencv中三个光流跟踪函数 的相关文章

随机推荐

  • 如何使用Keras fit和fit_generator(动手教程)

    写在前面 被Adrian Rosebrock圈粉后 xff0c 就一直期待他的更新 xff0c 作者每周一更新 xff0c 考虑到时差问题 xff08 作者在美国 xff09 xff0c 一般北京时间周二才能看到 作者根据读者留言中的问题写
  • CMake 的常用命令

    目录 0 CMake常用的命令或函数 xff1a 1 定义项目 project 2 多个目录 add subdirectory 3 常用命令 add executable add library 4 常用命令 改变最终目标文件输出位置 5
  • Libcurl的编译_HTTP/HTTPS客户端源码示例

    HTTP HTTPS客户端源码示例 环境 zlib 1 2 8 openssl 1 0 1g curl 7 36 Author Kagula LastUpdateDate 2016 05 09 阅读前提 xff1a CMake工具的基本使用
  • CNN卷积神经网络原理详解(上)

    CNN卷积神经网络原理详解 xff08 上 xff09 前言卷积神经网络的生物背景我们要让计算机做什么 xff1f 卷积网络第一层全连接层训练 前言 卷积网络 xff08 convolutional network 也叫作卷积神经网络 xf
  • 啥也不会照样看懂交叉熵损失函数

    啥也不会照样看懂交叉熵损失函数 什么是损失函数损失函数的作用有哪些损失函数交叉熵 xff08 Cross Entroy 损失函数 什么是损失函数 损失函数 loss function 是用来估量模型的预测值与真实值的不一致程度 xff0c
  • 可变形卷积从概念到实现过程

    可变形卷积从概念到实现过程 什么是可变形卷积 xff1f 为什么要可变形卷积 xff1f 可变形卷积结构形式 xff1f 可变形卷积的学习过程 xff1f 可变形卷积如何实现 xff1f 上期回顾 卷积神经网络进阶用法 残差网络如何解决梯度
  • 导航定位系统的原理解析(一个小白写给另一个小白)

    导航定位系统的原理解析 xff08 写给小白 xff09 前言 三星 定位基本原理 xff08 导航定位的原理 xff09 传输误差后记 前言 无人驾驶是这几年大火的一个研究方向 xff0c 研究无人驾驶需要了解的知识非常多 xff0c 但
  • 一张图详细说明自动驾驶车辆如何搭建硬件系统

    一张图详细说明自动驾驶车辆如何搭建硬件系统 文章结构说明第一部分 xff08 1 xff09 一图展示自动驾驶硬件系统的总体架构 xff08 2 xff09 庖丁解牛说内容1 线控模块2传感器模块 第二部分 xff08 1 xff09 传感
  • Tensorflow安装教程详解(图文详解,深度好文)

    Tensorflow安装教程详解 xff08 图文详解 xff0c 深度好文 xff09 前言安装前的准备工作关于python关于Anaconda 开始使用Tensorflow系统内配置Anaconda使用路径Anaconda Naviga
  • 二级指针 *(unsigned char**)(buf+0) = (unsigned char*)(buf+1)

    RTT里面的代码 1 rt err t rt mp init struct rt mempool mp 2 const char name 3 void start 4 rt size t size 5 rt size t block si
  • 子类以private方式继承父类

    子类以private方式继承父类 xff0c 则父类的pubic protected接口在子类变为private接口 xff0c 而父类的private接口在子类变为不可访问的接口 xff0c 而且不存在子类到父类的转换 所以子类以priv
  • CNN实战之如何分析影评-好看又有趣的讲解

    CNN实战之如何分析影评 好看又有趣的讲解 前言认识影评数据集了解TextCNN模型获取影评数据生成文本数据集生成TextCNN模型评估模型 前言 话说老王买了两张电影票打算请女神小丽去看电影 xff0c 老王希望看完电影趁着热度可以和小丽
  • 无人驾驶时代的室外组网技术研究

    无人驾驶时代的室外组网技术研究 车载自组网车载自组网简介车载自组网特点车载自组网组成及建构 主流自组网通信方式ZigBeeWIFIBlue ToothWiMAXDSRC4G 5G 参考文献 车载自组网 车辆通信网络就是在汽车上装载移动通信设
  • 这本关于机器学习的书---牛XXX

    机器学习好书推荐 如图所示 xff0c 这是一本可读性非常强 xff0c 非常有趣的一本介绍机器学习概率论的书 xff0c 让人看了会上瘾 看到这里 xff0c 作者摊牌了 本书作者即本人
  • ROS下运行rqt报错

    解决方案 xff1a 从上面可以看到ROS是通过python2 7编译 xff0c 查看自己python版本 xff0c 修改为对应版本即可成功运行rqt和rqt graph
  • zed2相机SDK安装及ROS安装

    一 安装相机SDK 相机SDK即相机的软件开发工具包 1 查看CUDA版本 xff1a nvcc version 2 相机SDK xff08 Software Development Kit xff09 下载网址 xff1a ZED SDK
  • zed2相机标定

    一 标定相机 1 刷新ros工作空间 source devel setup bash 2 打开相机ros节点 roslaunch zed wrapper zed2 launch 3 准备棋盘格标定板 xff0c 修改标定板checkboar
  • zed2相机标定(IMU)

    二 IMU标定 陀螺仪模型 xff1a 其中 xff0c 为陀螺仪测量值 xff1b 为陀螺仪真实值 xff1b 为陀螺仪零偏 xff08 也叫偏置 xff09 xff1b 为陀螺随机噪声项 xff08 包括白噪声和随机游走噪声 xff09
  • zed2相机标定(相机+imu)

    相机和imu单独标定请参考前面的博客 1 准备文件 checkboard yaml相机标定文件camera calibration yamlimu标定文件imu calibration yaml IMU标定文件格式需要改为如下 xff1a
  • Opencv中三个光流跟踪函数

    在slam里 xff0c 光流跟踪判断图像中某一物体的动态性 xff0c 主要包括3个函数 xff1a 1 goodFeaturesToTrack函数 作用 xff1a 提取输入图像中像素级别的角点 xff0c 支持harris角点和Shi