OpenCV之稠密光流
介绍
参考链接
在OpenCV中,光流分为稀疏光流和稠密光流,关于稀疏光流可以参考之前的文章
OpenCV之光流
稠密光流的解释,可以参考OpenCV官方文档
OpenCV提供了另一种算法来寻找密集的光流。它计算帧中所有点的光流。它基于Gunner Farneback的算法,该算法在Gunner法尔内巴克2003年的“基于多项式展开的双帧运动估计”中进行了解释。
其实稀疏光流和稠密光流的区别,见名知义,稀疏光流是跟踪部分点,而稠密光流跟踪的是全部的点。
实现
OpenCV中的API如下:
void cv::calcOpticalFlowFarneback(InputArray prev,InputArray next,InputOutputArray flow,double pyr_scale,int levels,int winsize,int iterations,int poly_n,double poly_sigma,int flags
)
参数解释
- prev,前一帧8位单通道输入图像
- next,当前帧图像,大小和类型与prev相同
- flow,输出流图像,其大prev相同,类型为CV_32FC2
- pyr_scale,指定为每个图像构建金字塔的图像比例(</1),pyr_scale=0.5表示经典金字塔,其中每一个下一层都比上一层小两倍
- levels,金字塔层数(包括初始图像); levels = 1意味着不会创建额外的图层,只会使用原始图像
- winsize,平均窗口大小;较大的值提高了算法对图像的鲁棒性,并可以检测更快速的运动,但会产生更模糊的运动场
- iterations,每个金字塔等级上执行迭代算法的迭代次数。用于在每个像素中查找多项式展开的像素邻域;
- poly_n,用于在每个像素中找到多项式展开的像素邻域的大小;较大的值意味着图像将近似于更平滑的表面,从而产生更多鲁棒算法和更模糊的运动场,通常poly_n=5或7
- poly_sigma,于平滑导数的高斯的标准偏差,用作多项式展开的基础;对于poly_n = 5,可以设置poly_sigma = 1.1,对于poly_n = 7,可以设置poly_sigma = 1.5;
- flags,操作标志,可取计算方法有:
OPTFLOW_USE_INITIAL_FLOW 使用输入流作为初始流近似。
OPTFLOW_FARNEBACK_GAUSSIAN 使用Gaussian winsize×winsiz过滤器代替光流估计的相同大小的盒子过滤器;通常情况下,这个选项可以比使用箱式过滤器提供更精确的流量,代价是速度更低;通常,应将高斯窗口的胜利设置为更大的值以实现相同的稳健性水平。
代码例子
官方例子,计算得到一个具有光流矢量(u,v)的双通道阵列。我们找到了它们的大小和方向。我们对结果进行颜色编码,以便更好地可视化。方向对应于图像的色调值。幅值对应于“值”平面。
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/video.hpp>using namespace cv;
using namespace std;int main()
{VideoCapture capture("../vtest.avi");if (!capture.isOpened()){//error in opening the video inputcerr << "Unable to open file!" << endl;return 0;}Mat frame1, prvs;capture >> frame1;cvtColor(frame1, prvs, COLOR_BGR2GRAY);while(true){Mat frame2, next;capture >> frame2;if (frame2.empty())break;cvtColor(frame2, next, COLOR_BGR2GRAY);Mat flow(prvs.size(), CV_32FC2);calcOpticalFlowFarneback(prvs, next, flow, 0.5, 3, 15, 3, 5, 1.2, 0);// visualizationMat flow_parts[2];split(flow, flow_parts);Mat magnitude, angle, magn_norm;cartToPolar(flow_parts[0], flow_parts[1], magnitude, angle, true);normalize(magnitude, magn_norm, 0.0f, 1.0f, NORM_MINMAX);angle *= ((1.f / 360.f) * (180.f / 255.f));//build hsv imageMat _hsv[3], hsv, hsv8, bgr;_hsv[0] = angle;_hsv[1] = Mat::ones(angle.size(), CV_32F);_hsv[2] = magn_norm;merge(_hsv, 3, hsv);hsv.convertTo(hsv8, CV_8U, 255.0);cvtColor(hsv8, bgr, COLOR_HSV2BGR);imshow("frame2", bgr);imshow("img", prvs);int keyboard = waitKey(30);if (keyboard == 'q' || keyboard == 27)break;prvs = next;}
}
运行截图
OpenCV之稠密光流相关推荐
- OpenCV中稠密光流算法总结
一.什么是光流 之前有一篇博客对光流做出了概念性的说明,可以参考:光流法-光流场估计概念 二.光流的基本算法 之前写了一篇博客介绍几个入门级的光流算法原理和推导,可以参考:经典光流计算方法(HS光流法 ...
- opencv 稀疏光流 稠密光流
opencv 稀疏光流 稠密光流 demo: http://download.csdn.net/detail/keen_zuxwang/9860696 参看.学习文档: OpenCV学习笔记(七)Lu ...
- 稀疏光流和稠密光流,OpenCV实现
# 参考:光流Optical Flow介绍与OpenCV实现_zouxy09的专栏-CSDN博客_opencv 光流 # 参考:光流(Optical Flow)算法原理及示例 # 参考:机器学习进阶- ...
- OpenCV视频分析与对象跟踪C++(二)光流对象跟踪-稀疏光流、稠密光流
移动对象跟踪三要素:图像表示(跟踪的对象要在图像中出现)外光模型,移动模型. 稀疏光流跟踪,KTL void calcOpticalFlowPyrLK( // 稀疏光流跟踪,KLTInputArray ...
- opencv c++ 光流法、稀疏光流法、稠密光流法、均值迁移追踪(meanshift、camshift)
1.概念 参考: (70条消息) 什么是光流法_张年糕慢慢走的博客-CSDN博客_光流法 (70条消息) 计算机视觉--光流法(optical flow)简介_T-Jhon的博客-CSDN博客_光流法 ...
- 3月18日 稠密光流FB,Deepflow,DIS,光流场的可视化
文章目录 经典的光流 稠密光流----Farneback DeepMatching 稠密光流 DeepFlow 算法的具体步骤 DIS稠密逆搜索实现快速光流 CV Dis光流结果 备注 光流场的可视化 ...
- OpenCV中的光流及视频特征点追踪
OpenCV中的光流及视频特征点追踪 1. 效果图 2. 原理 2.1 什么是光流?光流追踪的前提.原理 2.2 光流的应用 2.3 光流的2种方法 3. 源码 3.2 稀疏光流追踪 3.2 优化版稀 ...
- 干货 | OpenCV中KLT光流跟踪原理详解与代码演示
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 稀疏光流跟踪(KLT)详解 在视频移动 ...
- 光流 | OpenCV中的光流有关函数
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 1. calcOpticalFlo ...
最新文章
- 3D-camera结构光原理
- dbcp2和dbcp 1.4在API层面的差异
- postgres创建用户,修改用户密码,创建数据库
- html vw自动跳到ie,CSS3动画/关键帧,在IE11问题中使用vw进行转换
- java platform_Java Platform Module系统中的可选依赖项
- UDP报文观测以及DNS的工作原理
- 大道至简java伪代码
- /var/run/yum.pid 已被锁定,PID 为 XXXX 的另一个程序正在运行。
- java 与 php 区别或异同(整理、整合)
- tcpdump抓包分析
- 石灰窑计算机控制上料,石灰窑自动化控制系统
- OpenGL法线贴图
- WP Super Cache远程代码执行漏洞分析
- 【雕爷学编程】Arduino动手做(43)---单路继电器模块
- 二战企*查*查-企业-数-据爬虫
- 在ubuntu16.04中安装curl及遇到的问题
- java开发工具对比_Eclipse和STS哪个好_Java开发工具优缺点对比一览
- 意外被裁,逆境中意外面过阿里3+1,成功拿下阿里Java岗P6 offer
- Python3-Spyder-urllib.request抓取搜haohuo平台信息-保存到csv
- halcon垂足、轮廓平行线