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回调函数用法实例详解
Jul 02 Python
python简单实现刷新智联简历
Mar 30 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
浅谈python之新式类
Aug 12 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
使用Template格式化Python字符串的方法
Jan 22 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
python实现的发邮件功能示例
Sep 11 Python
python编写计算器功能
Oct 25 Python
python enumerate内置函数用法总结
Jan 07 Python
python如何基于redis实现ip代理池
Jan 17 Python
python中random.randint和random.randrange的区别详解
Sep 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
python编写暴力破解FTP密码小工具
2014/11/19 Python
python循环监控远程端口的方法
2015/03/14 Python
Python编写百度贴吧的简单爬虫
2015/04/02 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
Django实现发送邮件功能
2019/07/18 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
别名指示符是什么
2012/10/08 面试题
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
Python里面search()和match()的区别
2016/09/21 面试题
童装店创业计划书
2014/01/09 职场文书
毕业自我评价
2014/02/05 职场文书
环保公益广告语
2014/03/13 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
会计工作检讨书
2015/02/19 职场文书