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的Twisted框架编写简单的网络客户端
Apr 16 Python
Python批量转换文件编码格式
May 17 Python
python 容器总结整理
Apr 04 Python
使用python实现个性化词云的方法
Jun 16 Python
Python tkinter事件高级用法实例
Jan 31 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 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
深入apache host的配置详解
2013/06/09 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
Python脚本实时处理log文件的方法
2016/11/21 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
在django view中给form传入参数的例子
2019/07/19 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
科长竞争上岗演讲稿
2014/05/12 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
手术室护士个人总结
2015/02/13 职场文书
社区工作者个人总结
2015/02/28 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js