# 视频光流检测
✏️ ⛳️👍
**More Detail, please check the blog of zhihu as below**
✈️ ✈️ ✈️ [OpenCV视频分析-光流分析](https://zhuanlan.zhihu.com/p/69999853)
## 概述
✔️ 光流是由对象或相机的移动引起的两个连续帧之间的图像对象的明显运动的模式.它是2D矢量场,其中每个矢量是位移矢量,表示从第一帧到第二帧的点的移动。
如下图所示,是一个球在连续的5帧图像中的运动,箭头显示其位移矢量.
![光流](https://segmentfault.com/img/bVbel9k?w=538&h=238)
**光流有很多应用场景如下:**
- 运动恢复结构
- 视频压缩
- 视频防抖动等
**光流法的工作原理基于如下假设:**
- 连续的两帧图像之间,**目标像素灰度值不变**。
- 相邻的像素之间有**相似的运动**。
![3.png](https://i.loli.net/2019/06/19/5d0a03cc7d14051499.png)
✔️ 为了求解未知的u, v,采用Lucas-Kanada 方法解决,这个算法最早是有Bruce D. Lucas and Takeo Kanade两位作者提出来的,所以又被称为KLT。
KLT算法工作有三个假设前提条件:
- 亮度恒定
- 短距离移动
- 空间一致性
## 函数
✔️ Opencv中使用`cv2.calcOpticalFlowPyrLK()`函数计算一个稀疏特征集的光流,使用金字塔中的迭代 Lucas-Kanade 方法。
```python
nextPts,status,err = cv2.calcOpticalFlowPyrLK(prevImg, #上一帧图片
nextImg, #当前帧图片
prevPts, #上一帧找到的特征点向量
nextPts #与返回值中的nextPtrs相同
[, status[, err[, winSize
[, maxLevel[, criteria
[, flags[, minEigThreshold]]]]]]])
```
>输入值:
- prevImg--> 上一帧图片;
- nextImg--> 当前帧图片;
- prevPts--> 上一帧找到的特征点向量;
- nextPts--> 与返回值中的nextPtrs相同;
- status--> 与返回的status相同;
- err--> 与返回的err相同;
- winSize--> 在计算局部连续运动的窗口尺寸(在图像金字塔中),default=Size(21, 21);
- maxLevel--> 图像金字塔层数,0表示不使用金字塔, default=3;
- criteria--> 寻找光流迭代终止的条件;
- flags--> 有两个宏,表示两种计算方法,分别是OPTFLOW_USE_INITIAL_FLOW表示使用估计值作为寻找到的初始光流,OPTFLOW_LK_GET_MIN_EIGENVALS表示使用最小特征值作为误差测量,default=0;
- minEigThreshold--> 该算法计算光流方程的2×2规范化矩阵的最小特征值,除以窗口中的像素数; 如果此值小于minEigThreshold,则会过滤掉相应的功能并且不会处理该光流,因此它允许删除坏点并获得性能提升, default=1e-4.
>返回值:
- nextPtrs--> 输出一个二维点的向量,这个向量可以是用来作为光流算法的输入特征点,也是光流算法在当前帧找到特征点的新位置(浮点数);
- status--> 标志,在当前帧当中发现的特征点标志status==1,否则为0;
- err--> 向量中的每个特征对应的错误率.
**实现原理:**
- 在第一帧图像中检测Shi-Tomasi角点,
- 使用LK算法来迭代的跟踪这些特征点。迭代的方式就是不断向cv2.calcOpticalFlowPyrLK()中传入上一帧图片的特征点以及当前帧的图片。
- 函数会返回当前帧的点,这些点带有状态1或者0,如果在当前帧找到了上一帧中的点,那么这个点的状态就是1,否则就是0。
**实现流程:**
- 加载视频。
- 调用`cv2.GoodFeaturesToTrack` 函数寻找兴趣点(关键点)。
- 调用`cv2.CalcOpticalFlowPyrLK` 函数计算出两帧图像中兴趣点的移动情况。
- 删除未移动的兴趣点。
- 在两次移动的点之间绘制一条线段。
## 示例代码
**1. 删除静止点的光流分析:**
[Python code](../code_085/opencv_085_flow.py)
<img src=http://libai.91iot.net/lufax-read-palm/9jDmeoBxbh8g8lFq6HUCUvVgWtX5w3g1 height=400>
**2. 反向检测的光流分析:**
[Python code](../code_085/opencv_085.py)
<img src=http://libai.91iot.net/lufax-read-palm/uzeMGAcukDD2EsQBclmMRuGa5AYPuQfD height=400 >
# 稠密光流
## 概述
✔️ Lucas-Kanade方法计算稀疏特征集的光流,OpenCV提供了另一种算法来查找密集的光流,它计算帧中所有点的光流。它基于Gunner Farneback于2003年的《Two-Frame Motion Estimation Based on Polynomial Expansion》。
## 函数
✔️ 我们可以通过Opencv的函数`cv2.calcOpticalFlowFarneback`寻找稠密光流,我们得到的一个两个通道的向量(u,v)。得到的该向量的大小和方向。用不同的颜色编码来使其可视化。
✔️ 方向与Hue值相关,大小与Value值相关。
```bash
flow=cv.calcOpticalFlowFarneback(
prev,
next, flow,
pyr_scale, levels, winsize,
iterations, poly_n, poly_sigma, flags)
```
>输入
- prev--> 前一帧图片
- next--> 下一帧图片,格式与prev相同
- flow--> 与返回值相同,得到一个CV_32FC2格式的光流图
- pyr_scale--> 构建图像金字塔尺度
- levels--> 图像金字塔层数
- winsize--> 窗口尺寸,值越大探测高速运动的物体越容易,但是越模糊,同时对噪声的容错性越强
- iterations--> 对每层金字塔的迭代次数
- poly_n--> 每个像素中找到多项式展开的邻域像素的大小。n越大越光滑,也越稳定
- poly_sigma--> 高斯标准差,用来平滑倒数,n越大,sigma应该适当增加
- flags--> 光流的方式,有OPTFLOW_USE_INITIAL_FLOW 和OPTFLOW_FARNEBACK_GAUSSIAN 两种
-
> 输出
- 一个两通道的光流向量,实际上是每个点的像素位移值
## 示例代码
[Python code](../code_086/opencv_086.py)
![opticalfb](../code_086/opticalfb.png)
![opticalhsv](../code_086/opticalhsv.png)
# 参考
👍👍👍- [机器视觉 OpenCV—python目标跟踪(光流)](https://blog.csdn.net/wsp_1138886114/article/details/84400392)
👍👍👍- [opencv python 光流法](https://segmentfault.com/a/1190000015777243)
👍👍👍- [OpenCV Tutorial 官网](https://docs.opencv.org/4.0.0-alpha/d6/d00/tutorial_py_root.html)
没有合适的资源?快使用搜索试试~ 我知道了~
python图像处理.zip
共574个文件
png:158个
jpg:142个
bmp:130个
0 下载量 36 浏览量
2024-04-15
04:51:37
上传
评论
收藏 97.49MB ZIP 举报
温馨提示
【项目资源】:图像处理。包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
python图像处理.zip (574个子文件)
04_RGB2YCbCr 588B
vtest.avi 7.75MB
test.avi 844KB
bike.avi 436KB
test_cp.avi 122KB
Fig6.22(a).bmp 3.47MB
Fig6.35(3).bmp 3.09MB
Fig6.27(e).bmp 3.01MB
Fig6.27(f).bmp 3.01MB
种子图像YUV测试.bmp 2.97MB
Fig6.37(a).bmp 2.68MB
玉A-P0719124933.bmp 2.25MB
Fig6.16(a).bmp 1.57MB
Fig6.16(a)02.bmp 1.57MB
Fig6.16(a)转换后.bmp 1.57MB
Fig6.35(5).bmp 1.39MB
01.bmp 1.37MB
全红.bmp 1.37MB
Fig6.30(01).bmp 1.27MB
银杏种子U通道.bmp 1.06MB
银杏种子.bmp 1.06MB
Fig6.27(c).bmp 1MB
Fig6.27(d).bmp 1MB
Fig6.27(b).bmp 1MB
Fig6.27(a).bmp 1MB
Fig2.19(a).bmp 1MB
边界03开操作.bmp 904KB
边界03闭操作.bmp 904KB
Fig3.45(a).bmp 857KB
Fig6.35(1).bmp 772KB
Fig10.10(a).bmp 769KB
channel2.bmp 769KB
Fig6.38(a).bmp 768KB
Fig6.38(a)不可见水印.bmp 768KB
Fig6.38(a)_简单课件水印0.3.bmp 768KB
Fig1038(a)(noisy_fingerprint).bmp 749KB
Fig6.16(a)局部3.bmp 711KB
Fig0918(a)(Chickenfilet with bones)联通分量.bmp 670KB
j10Gray35_35邻域平均滤波.bmp 665KB
j102D中值3.bmp 665KB
j10Gray马赛克效果.bmp 665KB
j10.bmp 665KB
Fig9.05(a)膨胀.bmp 661KB
Fig3.37(a)2D中值11_11.bmp 588KB
Fig3.37(a)2D中值7_7.bmp 588KB
Fig3.37(a)拉普拉斯绝对值标定.bmp 580KB
Fig3.37(a)2D中值3_3.bmp 580KB
Fig3.37(a)拉普拉斯未标定叠加.bmp 580KB
Fig3.37(a)拉普拉斯未标定.bmp 580KB
Fig3.37(a)Sobel算子.bmp 580KB
Fig3.37(a)拉普拉斯绝对值标定叠加.bmp 580KB
Fig3.37(a)拉普拉斯标准标定叠加.bmp 580KB
Fig3.37(a)Robert算子.bmp 580KB
Fig3.37(a)拉普拉斯标准标定.bmp 580KB
Fig3.09(a).bmp 574KB
Fig3.45(a)Small.bmp 549KB
Fig6.16(a)局部2.bmp 520KB
Fig3.45(a)Bottom.bmp 487KB
Fig10.02(b).bmp 429KB
Fig3.46(a).bmp 392KB
Fig3.45(a)Top.bmp 361KB
Fig3.13.bmp 357KB
阈值图像02细化.bmp 351KB
阈值图像02细化叠加.bmp 351KB
银杏YUV_U通道.bmp 315KB
二值化的图256膨胀.bmp 308KB
阈值图像03.bmp 303KB
边界03.bmp 303KB
Fig3.43(a).bmp 297KB
Fig3.41(c).bmp 297KB
Fig6.20(a).bmp 277KB
Fig3.04(a).bmp 271KB
Fig0916(a)(region-filling-reflections).bmp 257KB
Fig4.03(a).bmp 257KB
Fig2.19(a)512.bmp 257KB
Fig3.36(a).bmp 253KB
Fig3.10(b).bmp 245KB
Fig3.35(a).bmp 245KB
Fig3.10(b).bmp 245KB
Fig3.15(a)2.bmp 245KB
Fig3.15(a)1top.bmp 245KB
Fig3.15(a)3.bmp 245KB
Fig3.15(a)4.bmp 245KB
Fig3.40(a).bmp 245KB
Fig10.04(a).bmp 233KB
Fig0905(a)(wirebond-mask).bmp 233KB
02_256Gray预测编码.bmp 225KB
Fig918阈值(200).bmp 224KB
Fig918腐蚀.bmp 224KB
Fig0918(a)(Chickenfilet with bones).bmp 224KB
j10Gray.bmp 223KB
j10.bmp 223KB
Fig0907(a)(text_gaps_1_and_2_pixels).bmp 221KB
Fig9.05(a)反色.bmp 221KB
Fig9.05(a).bmp 221KB
Fig10.25.bmp 219KB
Fig9.11(a)综合运用指纹.bmp 216KB
Fig3.37(a).bmp 197KB
Fig6.21(a).bmp 196KB
Fig9.07(a)腐蚀.bmp 192KB
共 574 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
白话Learning
- 粉丝: 4601
- 资源: 2983
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功