python实现opencv中的几个光流函数

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

python实现opencv中的几个光流函数

1)calcOpticalFlowPyrLK

通过金字塔Lucas-Kanade 光流方法计算某些点集的光流(稀疏光流)。

相关论文:”Pyramidal Implementation of the Lucas Kanade Feature TrackerDescription of the algorithm”

环境:python3+opencv3

#coding=utf-8
import numpy as np
import cv2
# from common import anorm2, draw_str
from time import clock
import cmath

lk_params = dict(winSize=(15, 15),
                 maxLevel=2,
                 criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))

# maxCorners : 设置最多返回的关键点数量。
# qualityLevel : 反应一个像素点强度有多强才能成为关键点。
# minDistance : 关键点之间的最少像素点。
# blockSize : 计算一个像素点是否为关键点时所取的区域大小。
# useHarrisDetector :使用原声的 Harris 角侦测器或最小特征值标准。
# k : 一个用在Harris侦测器中的自由变量。
feature_params = dict(maxCorners=5000000,
                      qualityLevel=0.1,
                      minDistance=7,
                      blockSize=7)

class App:
    def __init__(self, video_src):  # 构造方法,初始化一些参数和视频路径
        self.track_len = 10
        self.detect_interval = 1
        self.tracks = []
        self.cam = cv2.VideoCapture(video_src)
        self.frame_idx = 0
        self.num = 0
        self.i = 0
        self.all_distance = 0
        self.count = 0

    def run(self):  # 光流运行方法
        while True:
            ret, frame = self.cam.read()  # 读取视频帧
            if ret == True:
                frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 转化为灰度虚图像
                # vis = frame.copy()
                h, w = frame.shape[:2]
                vis = np.ones((h, w), )
                f = open('./F/8/shuibo_8_LK(x1,y1,x2,y2).txt','w')

                if len(self.tracks) > 0:  # 检测到角点后进行光流跟踪
                    img0, img1 = self.prev_gray, frame_gray
                    p0 = np.float32([tr[-1] for tr in self.tracks]).reshape(-1, 1, 2)
                    """
                    nextPts, status, err = calcOpticalFlowPyrLK(prevImg, nextImg, prevPts[, nextPts[, status[, 
                    err[, winSize[, maxLevel[, criteria[, flags[, minEigThreshold]]]]]]]])
                    参数说明:
                      prevImage 前一帧8-bit图像
                      nextImage 当前帧8-bit图像
                      prevPts 待跟踪的特征点向量
                      nextPts 输出跟踪特征点向量
                      status 特征点是否找到,找到的状态为1,未找到的状态为0
                      err 输出错误向量,(不太理解用途...)
                      winSize 搜索窗口的大小
                      maxLevel 最大的金字塔层数
                      flags 可选标识:OPTFLOW_USE_INITIAL_FLOW   OPTFLOW_LK_GET_MIN_EIGENVALS
                    """
                    p1, st, err = cv2.calcOpticalFlowPyrLK(img0, img1, p0, None,
                                                           **lk_params)  # 前一帧的角点和当前帧的图像作为输入来得到角点在当前帧的位置
                    p0r, st, err = cv2.calcOpticalFlowPyrLK(img1, img0, p1, None,
                                                            **lk_params)  # 当前帧跟踪到的角点及图像和前一帧的图像作为输入来找到前一帧的角点位置
                    d = abs(p0 - p0r).reshape(-1, 2).max(-1)  # 得到角点回溯与前一帧实际角点的位置变化关系

                    # good = d < 1  # 判断d内的值是否小于1,大于1跟踪被认为是错误的跟踪点
                    good=d
                    new_tracks = []
                    for tr, (x, y), good_flag in zip(self.tracks, p1.reshape(-1, 2), good):  # 将跟踪正确的点列入成功跟踪点
                        if not good_flag:
                            continue
                        tr.append((x, y))#tr是前一帧的角点,与当前帧的角点(x,y)合并。标志为good_flag
                        if len(tr) > self.track_len:
                            del tr[0]
                        new_tracks.append(tr
OpenCV进阶(2)OpenCV中的 在这篇文章中,我们将学习在视频或帧序列中计算流的各种算法。我们将讨论稀疏和密集流算法的相关理论和在OpenCV中的实现。 1.什么是流? 流是一个视频中两个连续帧之间的逐像素运动估计任务。基本上,流任务意味着计算像素的移动向量作为物体在两个相邻图像之间的位移差。流的主要思想是估计物体运动或摄像机运动引起的物体的位移矢量。 2.理论基础 让我们假设我们有一个灰度图像。我们定义函数I(x,y,t)I(x,y,t)I(x,y,t),其中x,y为像素坐标,t为帧数。函数I(x,y,t)I(x,y,t) 阅读详情

相关推荐

OpenCV-Python(40):流算法

由于目标对象或者摄像机的移动造成的图像对象在连续两帧图像中的移动被称为流。它是一个2D 向量场,可以用来显示一个点从第一帧图像到第二帧图像之间的移动。如下图所示:上图显示了一个点在连续的五帧图像间的移动。箭头表示流场向量。流算法是一种用于估计图像序列中像素运动的计算机视觉技术。1. 在连续的两帧图像之间(目标对象)的像素的灰度值不改变。2. 相邻的像素具有相同的运动根据这个假设,流算法通过计算相邻帧之间的像素差异来确定像素的运动方向和速度。

图灵追幕者博客录 2755

Pyramidal Implementation of the Lucas Kanade Feature Tracker

一篇经典的介绍运用金字塔策略如何实现L-K流法的论文,论文中详细阐述了L-K流法的原理及实现

robomaster机器视觉(c++/python:opencv):1.识别装甲板两边

占坑

weixin_42755384的博客 1万+

Pyramidal Implementation of the Lucas Kanade Feature Tracker Description of the algorithm

对 Lucas Kanade算法的Pyramidal Implementation

流 | 近十年流参考文献总结

博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 [1]Bruhn A, Weickert J, Kohlberger T, et al. A Multigrid Platform for Real-Time Motion Computation with Discontinuit...

尘世冰封的专栏 7216

python:实现Horn–Schunck流算法(附完整源码)

python:实现Horn–Schunck流算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1138

图像处理和图像识别中常用的OpenCV函数

1.   cvLoadImage:将图像文件加载至内存; 2.   cvNamedWindow:在屏幕上创建一个窗口; 3.   cvDestroyWindow:销毁显示图像文件的窗口; 4.   cvDestroyAllWindows:销毁显示图像文件的所有窗口; 5.   cvShowImage:在一个已创建好的窗口中显示图像; 6.   cvWaitKey:使程序暂停,等待用户触发

网络资源是无限的 2万+

视频跟踪之流算法简介

流算法用于在视频中跟踪连续帧中的特征。 假设你要跟踪视频中的特定对象。在每一帧上运行一个特征提取器是非常耗费计算资源的,这个过程会很慢。因此,你只需从当前帧中提取出要素,然后在连续帧中跟踪这些要素。 流算法在基于视频的计算机视觉应用中被大量使用。optflow模块包含了执行流操作所需的所有算法。还有一个称为tracking的模块,其中包含可用于跟踪特征的更多算法。 ...

dally2的博客 1476

OpenCV-Python

OpenCV-Python

m0_37302966的博客 1139

基于PythonOpenCV实现

基于PythonOpenCV实现 本文内容摘自 << Programming Computer Vision with Python >> 一书 1. 流是目标、场景或摄像机在连续两帧图像间运动时造成的目标的运动。它是图像在平移过程中的二维矢量场。 流法主要依赖于三个假设: 亮度很定。 图像中目标的像素强度在连续帧之间不会发生变化。 时间规律。 相邻帧之间的时间足够短,以至于在考虑运行变化时可以忽略他们之间的差异。 空间一致性。相邻像素具有相似的运动。 2.

曹逗号@INHA 2642

python使用opencv提取

记录一下流特征提取的算法,方便自己之后进行使用

bugcat的博客 7812

opencv+python 稀疏流估计算法 代码实现 目标跟踪

流估计算法 流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。 假设条件 (1)亮度恒定,就是同一点随着时间的变化...

逗创科技——逗创创的博客 1万+

opencv流法的实现(python3)

opencv流法的实现前言一、流法的数学原理二、opencv实现流法1. 实现流程2. 代码3.输出结果 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、流法的数学原理 参考 https://blog.csdn.net/qq_41368247/article/details/82562165 二、opencv实现流法 1

m0_37412775的博客 5462

python+OpenCV+cuda计算

利用OpenCV计算TVL1流,具体实现可参考 这里,需要注意的是要用 opencv-contrib-pythonopencv-python 是不包含流计算模块的;这是纯 CPU 的计算方式,计算速度为大约为 3FPS,很难实现实时,考虑使用GPU加速。 1、OpenCV3.x / OpenCV2.x OpenCV本身支持C++的GPU流计算方法,完成编译就能使用,但是python的GPU...

DaGongJiGuoMaLu09的博客 5257

基于opencv,使用python提取视频帧以及提取TVL1

处理图像,就得派上opencv了,python可以很好的支持它。 一 从视频读取帧、得到相关属性、并设置保存哪些帧 首先;我们得新建一个videocapture对象; cap=cv2.VideoCapture(videopath) 通过上面建立的对象,可以获取视频的相关属性,一般使用中用到的属性主要有如下: cv2.CAP_PROP_FRAME_WI...

weixin_41558411的博客 1万+

基于Python通过OpenCV实现的口罩识别系统操作篇

基于Python通过OpenCV实现的口罩识别系统操作篇 文章目录基于Python通过OpenCV实现的口罩识别系统操作篇前言一、级联分类器二、使用步骤1.引入库2.引入级联分类器三、2.读入数据总结 前言 理论思路介绍篇,可以查看往日文章。 项目实现环境: 基于Python 3.8.1版本 opencv-python 4.2.0.34版本 需要自己下载OpenCV的库文件,添加其中的分类器 一、级联分类器 首先要引入相应的级联分类器 本项目一共使用了三个级联分类器: 人脸面部识别树:haarcasc

Forgottenmaster的博客 6934

使用Python+OpenCV+Tensorflow+Flask实现检测X图像中的COVID-19(新冠病毒)

免责声明本研究是为X图像中COVID-19的自动检测而开发的,完全是为了教育目的。由于COVID-19没有经过专业或学术评估,最终的应用并不打算成为一个准确的用于诊断人类的COVID-...

深度学习与计算机视觉 6723

python opencv流跟踪,opencv-python

目标:了解流的概念及 Lucas-Kanade 流法。使用cv.calcOpticalFlowPyrLK()函数来跟踪视频中的特征点。流由于目标对象或者摄像机的移动造成的图像对象在连续两帧图像中的移动被称为流。它是一个 2D 向量场,可以用来表示一个点从第一帧图像到第二帧图像之间的移动。如下图所示。 上图显示了一个球在连续的五帧图像间的移动。箭头表示其位移向量。流在很多领域中都很有用:由...

weixin_36430300的博客 1148

OpenCV 中的流 (C++/Python)

本文将了解计算视频或帧序列中流的各种算法。我们将讨论稀疏和密集流算法的相关理论和OpenCV中的实现。并提供 C++ 和 Python 代码

DT程序员的博客 1576
上一篇: leetcode题解-python 645. 错误的集合 Set Mismatch (Easy)
下一篇: 剑指offer 66道:二维数组的查找
LKY111
博客等级 码龄12年 8粉丝 40原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值