前言
光流跟踪法是目前分析运动图像比较重要的方法,用来指时变图像的运动速度,是根据运动的物体,对应到图像中亮度模式也在运动得到的。稀疏光流跟踪是一种经典的对象跟踪算法,可以绘制运动对象的跟踪轨迹与运行方向,是一种简单、实时高效的跟踪算法,这个算法最早是有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
Android
《Android利用SurfaceView结合科大讯飞修改语音实别UI》
《Android关于语音识别的功能实现分析(一)---结构化思维》
《Android关于语音识别的功能实现分析(二)---语义解析》
.Net C#
数据库及其它
长按下方二维码关注微卡智享