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里面。

在源图上画出特征点

我们把提取出来的特征点通过遍历后以红色的圆点形式画到了源图上,然后再显示出来。

整个部分的代码

我们看一下运行出来的视频效果

视频中的截图

-END-

Vaccae的往期经典


OpenCV

《C++ OpenCV案例实战---卡号获取

《C++ OpenCV案例实战---卡片截取(附代码)

《C++ OpenCV透视变换---切换手机正面图片》

《C++ OpenCV实战---获取数量

《C++ OpenCV实战---利用颜色分割获取数量》


Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串

《Android碎片化布局fragment的实战应用


.Net C#

《C#自定义特性(Attribute)讲解与实际应用

《C#根据类生成签名字符串(附DEMO下载地址)

《C++创建动态库C#调用》

《C#与三菱PLC(型号FX2N)串口通讯类


数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)

《SQL随机增加销售数据的脚本编写(附脚本下载地址)


长按下方二维码关注微卡智享



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值