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 相关文章推荐
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
Python列表list数组array用法实例解析
Oct 28 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
Python3非对称加密算法RSA实例详解
Dec 06 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
Python 如何提高元组的可读性
Aug 26 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
keras slice layer 层实现方式
Jun 11 Python
Pytest allure 命令行参数的使用
Apr 18 Python
关于 Python json中load和loads区别
Nov 07 Python
Python中的程序流程控制语句
Feb 24 Python
Python PIL按比例裁剪图片
May 11 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
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
js中日期的加减法
2015/05/06 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
新手简单了解vue
2019/05/29 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python变量不能以数字打头详解
2016/07/06 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
python中update的基本使用方法详解
2019/07/17 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
元旦寄语大全
2014/04/10 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
五年级语文教学反思
2016/03/03 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
win10搭建配置ftp服务器的方法
2022/08/05 Servers