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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
python提取xml里面的链接源码详解
Oct 15 Python
Python实现自动装机功能案例分析
Oct 22 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 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
smarty中post用法实例
2014/11/28 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
js继承实现方法详解
2016/12/16 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python3连接MySQL数据库实例详解
2018/05/24 Python
浅谈python之新式类
2018/08/12 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
护理学应聘自荐书范文
2014/02/05 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
普通党员整改措施
2014/10/24 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
Python编写nmap扫描工具
2021/07/21 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js