首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C++ OpenCV视频操作之稠密光流对象跟踪

C++ OpenCV视频操作之稠密光流对象跟踪

作者头像
Vaccae
发布2019-07-25 11:19:02
发布2019-07-25 11:19:02
2.1K0
举报
文章被收录于专栏:微卡智享微卡智享

前言

我们在学习完稀疏光流跟踪完后,我们再学习一下稠密光流对象跟踪,稠密光流算法(即图像上所有像素点的光流都计算出来),由于要计算图像上所有点的光流,故计算耗时,速度慢。一般来说我们在平时应用上可能会用到的比较少,在这里我们就简单讲解一下。

视频效果

https://v.qq.com/x/page/v1359hi8z71.html

<br />

看过稀疏光流的视频的人,再对比上面的视频可以看出来明显稠密光流跟踪的速度要慢不少,视频的播放都看出卡顿的感觉。

函数API

void cv::calcOpticalFlowFarneback( InputArray _prev0, InputArray _next0, OutputArray _flow0, double pyr_scale, int levels, int winsize, int iterations, int poly_n, double poly_sigma, int flags ) 参数说明如下:

InputArray :输入前一帧图像

InputArray :输入后一帧图像

OutputArray :输出的光流

double:金字塔上下两层之间的尺度关系

int :金字塔层数

int:均值窗口大小,越大越能denoise并且能够检测快速移动目标,但会引起模糊运动区域

int:迭代次数

int:像素领域大小,一般为5,7等

double:高斯标注差,一般为1-1.5

int:计算方法。主要包括OPTFLOW_USE_INITIAL_FLOW和OPTFLOW_FARNEBACK_GAUSSIAN

代码实现

我们再新建一个项目名为opencv--video4,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法

先在外层读取第一帧图像

读取图像并时行稠密光流计算,下图红框内就是用到了我们的API,明显可以看出来这里比稀疏光流要简单些,因为不用再先获取特征点进行对比了,下面的蓝色框就是我们绘制结果的函数

代码结尾

绘制结果的函数

这样整个就完成了,文章开头的视频就是我们运行起来的效果,下面是视频中的截图

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档