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杀死一个线程的方法
Sep 06 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
python opencv读mp4视频的实例
Dec 07 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
python3实现单目标粒子群算法
Nov 14 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 Python
python基于tkinter实现gif录屏功能
May 19 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 CURL用法的深入分析
2013/06/09 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
python中pop()函数的语法与实例
2020/12/01 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
全球度假村:Club Med
2017/11/27 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
校园主题婚礼活动策划方案
2014/09/15 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
十岁生日答谢词
2015/01/05 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
Python jiaba库的使用详解
2021/11/23 Python