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系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python操作MongoDB数据库PyMongo库使用方法
Apr 27 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
浅谈python 中类属性共享的问题
Jul 02 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
Python测试框架:pytest学习笔记
Oct 20 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与javascript对多项选择的处理
2006/10/09 PHP
PHP5+UTF8多文件上传类
2008/10/17 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
JSON获取属性值方法代码实例
2020/06/30 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
python字典操作实例详解
2017/11/16 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
python更改已存在excel文件的方法
2018/05/03 Python
python 自定义装饰器实例详解
2019/07/20 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
个人简历自我鉴定
2013/10/11 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
2014年教研室工作总结
2014/12/06 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python
js 实现验证码输入框示例详解
2022/09/23 Javascript