opencv3/Python 稠密光流calcOpticalFlowFarneback详解


Posted in Python onDecember 11, 2019

光流是由物体或相机的运动引起的图像对象在两个连续帧之间的视在运动模式.光流方法计算在t和 t+Δtt+Δt时刻拍摄的两个图像帧之间的每个像素的运动位置。这些方法被称为差分,因为它们基于图像信号的局部泰勒级数近似; 也就是说,它们使用关于空间和时间坐标的偏导数。

和稀疏光流相比,稠密光流不仅仅是选取图像中的某些特征点(一般用角点)进行计算;而是对图像进行逐点匹配,计算所有点的偏移量,得到光流场,从而进行配准.因此其计算量会显著大于稀疏光流,但效果一般优于稀疏光流.

函数:

def calcOpticalFlowFarneback(prev, next, flow, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags):

使用Gunnar Farneback算法计算密集光流。

相关参数:

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×winsizewinsize×winsize过滤器代替光流估计的相同大小的盒子过滤器;通常情况下,这个选项可以比使用箱式过滤器提供更精确的流量,代价是速度更低;通常,应将高斯窗口的胜利设置为更大的值以实现相同的稳健性水平。

示例:

#!/usr/bin/python
# coding:utf8

import numpy as np
import cv2

step=10

if __name__ == '__main__':
 cam = cv2.VideoCapture(0)
 ret, prev = cam.read()
 prevgray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)

 while True:
 ret, img = cam.read()
 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 # 使用Gunnar Farneback算法计算密集光流
 flow = cv2.calcOpticalFlowFarneback(prevgray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
 prevgray = gray
 # 绘制线
 h, w = gray.shape[:2]
 y, x = np.mgrid[step / 2:h:step, step / 2:w:step].reshape(2, -1).astype(int)
 fx, fy = flow[y, x].T
 lines = np.vstack([x, y, x + fx, y + fy]).T.reshape(-1, 2, 2)
 lines = np.int32(lines)

 line = []
 for l in lines:
 if l[0][0]-l[1][0]>3 or l[0][1]-l[1][1]>3:
 line.append(l)

 cv2.polylines(img, line, 0, (0,255,255))
 cv2.imshow('flow', img)

 ch = cv2.waitKey(5)
 if ch == 27:
 break
 cv2.destroyAllWindows()

opencv3/Python 稠密光流calcOpticalFlowFarneback详解

以上这篇opencv3/Python 稠密光流calcOpticalFlowFarneback详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
详解Python中的循环语句的用法
Apr 09 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
python表格存取的方法
Mar 07 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Django在pycharm下修改默认启动端口的方法
Jul 26 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
tensorflow常用函数API介绍
Apr 19 Python
Python制作简单的剪刀石头布游戏
Dec 10 Python
centos7中安装python3.6.4的教程
Dec 11 #Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 #Python
Python3 中作为一等对象的函数解析
Dec 11 #Python
opencv3/C++图像像素操作详解
Dec 10 #Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 #Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 #Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 #Python
You might like
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
php 可变函数使用小结
2018/06/12 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
Python unittest单元测试框架总结
2018/09/08 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
如何获得EntityManager
2014/02/09 面试题
小学教学随笔感言
2014/02/26 职场文书
大学生就业自荐书
2014/06/16 职场文书
公司员工离职证明书
2014/10/04 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
颐和园导游词
2015/01/30 职场文书
外国人来华邀请函
2015/01/31 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
师德师风培训感言
2015/08/03 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS