这篇文章主要为大家展示了“C++ OpenCV视频操作之如何实现KLT稀疏光流对象跟踪”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++ OpenCV视频操作之如何实现KLT稀疏光流对象跟踪”这篇文章吧。
前言
光流跟踪法是目前分析运动图像比较重要的方法,用来指时变图像的运动速度,是根据运动的物体,对应到图像中亮度模式也在运动得到的。稀疏光流跟踪是一种经典的对象跟踪算法,可以绘制运动对象的跟踪轨迹与运行方向,是一种简单、实时高效的跟踪算法,这个算法最早是有Bruce D. Lucas and Takeo Kanade两位作者提出来的,所以又被称为KLT。KLT算法工作有三个假设前提条件:
亮度恒定
短距离移动
空间一致性
基本流程
读取图像
角点提取
光流计算
跟踪流程
输出跟踪图像
这一篇我们先看一下基本流程的前两步读取图像和角点提取。
代码演示
我们再新建一个项目名为opencv--video3,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法
里面加载的图像还是上次我们用到的test6.mp4,就是那个我拿一个按摩器在视频中移动那个视频。
定义参数
首先我们定义了两个Mat和一个特征点提取的vector
将源图转换为灰度图
角点提取
我们在特征提取的时候当时学过Shi-Tomasi角点检测,用到的角点检测的API就是goodFeaturesToTrack,里面的具体参数可以看一下当时的文章《C++ OpenCV特征提取之亚像素级角点检测》里面的定义及说明。这里用到后把上面的灰度图像中的特征提取出来放到了我们定义的std::vector<cv::Point2f> features里面。
在源图上画出特征点
我们把提取出来的特征点通过遍历后以红色的圆点形式画到了源图上,然后再显示出来。
整个部分的代码
我们看一下运行出来的视频效果
视频中的截图
以上是“C++ OpenCV视频操作之如何实现KLT稀疏光流对象跟踪”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。