C++OpenCV视频操作之如何实现KLT稀疏光流对象跟踪
这篇文章主要为大家展示了“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
在源图上画出特征点
我们把提取出来的特征点通过遍历后以红色的圆点形式画到了源图上,然后再显示出来。
整个部分的代码
我们看一下运行出来的视频效果
视频中的截图
以上是“C++ OpenCV视频操作之如何实现KLT稀疏光流对象跟踪”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
文章名称:C++OpenCV视频操作之如何实现KLT稀疏光流对象跟踪
地址分享:http://pwwzsj.com/article/jcejjg.html