Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >视频光流

视频光流

作者头像
裴来凡
发布于 2022-05-29 01:21:20
发布于 2022-05-29 01:21:20
74500
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import cv2
lk_params=dict( winSize=(15,15),
                  maxLevel=3,
                  criteria=(cv2.TERM_CRITERIA_EPS|cv2.TERM_CRITERIA_COUNT,10,0.03))
feature_params=dict( maxCorners=800,
                       qualityLevel=0.3,
                       minDistance=7,
                       blockSize=7 )
class App:
    def __init__(self,video_src):
        self.track_len=10#跟踪轨迹长度
        self.detect_interval=5
        self.tracks=[]#储存跟踪点
        self.cam=cv2.VideoCapture('C:/Users/xpp/Desktop/2021091.avi')
        self.frame_idx=0
    def run(self):
        while True:
            ret,frame=self.cam.read()
            frame_gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
            vis=frame.copy()
            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)
                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
                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))
                    if len(tr)>self.track_len:
                        del tr[0]
                    new_tracks.append(tr)
                    cv2.circle(vis,(x,y),2,(0,255,0),-1)
                self.tracks=new_tracks
                cv2.polylines(vis,[np.int32(tr) for tr in self.tracks],False,(0,255,0))
            if self.frame_idx%self.detect_interval==0:
                mask=np.zeros_like(frame_gray)
                mask[:]=255
                for x,y in [np.int32(tr[-1]) for tr in self.tracks]:
                    cv2.circle(mask,(x,y),5,0,-1)
                p=cv2.goodFeaturesToTrack(frame_gray,mask=mask,**feature_params)
                if p is not None:
                    for x, y in np.float32(p).reshape(-1,2):
                        self.tracks.append([(x,y)])
            self.frame_idx+=1
            self.prev_gray=frame_gray
            cv2.imshow('lk_track',vis)
            ch=cv2.waitKey(1)
            if ch==27:
                break
def main():
    video_src='video.flv'
    App(video_src).run()
    cv2.destroyAllWindows()
if __name__=='__main__':
    main()

http://mpvideo.qpic.cn/0bf2amaakaaalmaadnbxpvqvaa6daubqabia.f10002.mp4?

视频光流是视频亮度的运动信息描述,对视频中运动对象轨迹进行标记的一种常用方法。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV中的光流及视频特征点追踪
这篇博客将介绍光流的概念以及如何使用 Lucas-Kanade 方法估计光流,并演示如何使用 cv2.calcOpticalFlowPyrLK() 来跟踪视频中的特征点。
玖柒的小窝
2021/10/25
1K0
【Opencv系列】关键点追踪--光流估计
云帆沧海
2024/01/17
1830
CV学习笔记(九):光流法的实现
在这一篇文章中,我们使用OpenCV中的calcOpticalFlowPyrLK()函数来实现,是基于金字塔LK光流算法,计算某些点集的稀疏光流。
云时之间
2020/02/26
1K0
python光流法算法学习「建议收藏」
光流法是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。 简单来说,光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。
全栈程序员站长
2022/09/15
1.7K0
Python OpenCV3 计算机视觉秘籍:6~9
变量之间的线性相关性是所有可能选项中最简单的。 从近似和几何任务到数据压缩,相机校准和机器学习,它可以在许多应用中找到。 但是,尽管它很简单,但是当现实世界的影响发挥作用时,事情就会变得复杂。 从传感器收集的所有数据都包含一部分噪声,这可能导致线性方程组具有不稳定的解。 计算机视觉问题通常需要求解线性方程组。 即使在许多 OpenCV 函数中,这些线性方程也是隐藏的。 可以肯定的是,您将在计算机视觉应用中面对它们。 本章中的秘籍将使您熟悉线性代数的方法,这些方法可能有用并且实际上已在计算机视觉中使用。
ApacheCN_飞龙
2023/04/27
2.5K0
Python OpenCV3 计算机视觉秘籍:6~9
Deepsort + Yolo 实现行人检测和轨迹追踪
行人检测是近年来计算机视觉领域的研究热点,同时也是目标检测领域中的难点。其目的是识别和定位图像中存在的行人,在许多领域中都有广泛的应用。交通安全方面,无人驾驶汽车通过提前检测到行人及时避让来避免交通事故的发生;安防保护方面,通过行人检测来防止可疑人员进入;公共场所管理方面,通过行人检测统计人流量数据,优化人力物力等资源的分配。
AI科技大本营
2021/09/27
3.6K0
使用双目相机进行三维重建 第二部分:姿态估计
引言:在上一篇文章中我们讲了相机的特征以及这些信息与我们做3D重建有什么关系。通过相机校正,我们确认了一些我们程序要用的相机属性数据,即相机矩阵(camera matrix)和扭曲系数(distortion coefficients)。利用这些信息,我们可以从拍摄的模式图像(patterned image)中计算出现实空间中物体的位置。在我们的例子中,我们会用象棋棋盘图像,并通过3D立方的绘制方向来可视化平面物体的相对位置。
AI研习社
2019/05/15
1.5K0
使用双目相机进行三维重建 第二部分:姿态估计
Opencv----Optical Flow
光流是相机或物体运动引起的两连续帧图像中物体的运动模式, 是一个二维的位移向量场, 每一个向量表示第一个点到第二个点之间的位移
devecor
2019/11/25
1.4K0
Opencv----Optical Flow
对极几何
算法:对极几何是是“两幅图像之间的对极几何”,图像平面与以基线为轴的平面束的交的几何(基线是指连接摄像机中心的直线)。
裴来凡
2022/05/29
3480
对极几何
目标跟踪与定位——Introduction to motion
要随着时间变化来跟踪物体并检测动作: 方法之一是提取特定的特征 观察这些特征是怎么从一帧变化到下一帧的,这里可以用到光流法(optical flow)。
小飞侠xp
2018/10/12
1.2K0
目标跟踪与定位——Introduction to motion
OpenCV系列学习之(六)
把A的转置与A相乘再取逆,把这个矩阵对角化为特征值x1,x2,当两个特征值都很大时,矩阵才可逆,即为角点时矩阵才可逆。图片中80%以上的像素点都是不可逆的,只有角点才可逆。所以在做光流估计时,输入要是角点。
墨明棋妙27
2022/08/24
3740
OpenCV系列学习之(六)
熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了
目录 1,图像特征 2,角点特征 3,使用OpenCV和PIL进行特征提取和可视化 4,特征匹配 5,图像拼接
deephub
2020/05/09
4K0
熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了
【目标跟踪】光流跟踪(python、c++代码)
读书猿
2024/02/05
6950
【目标跟踪】光流跟踪(python、c++代码)
基于OpenCV实现两种方法测量圆弧长度(步骤 + 代码)
要求:如上所示,分别用OpenCV计算出图1和图2中圆弧的长度。因为OpenCV中没有提供现成计算圆弧的方法,所以需要自己编写,本文将提供2种不同的方法来实现,仅供参考。
Color Space
2024/06/05
4710
基于OpenCV实现两种方法测量圆弧长度(步骤 + 代码)
如何使用光流法进行目标追踪【文末送书】
如今,“图像分类”、“目标检测”、“语义分割”、“实例分割”和“目标追踪”等5大领域是计算机视觉的热门应用。其中“图像分类”与“目标检测”是最基础的应用,在此基础上,派生出了“语义分割”、“实例分割”和“目标跟踪”等相对高级的应用。
Color Space
2023/09/22
1.2K0
如何使用光流法进行目标追踪【文末送书】
opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
opencv中读入、显示、写出图片:cv2.imread(), cv2.imshow(), cv2.imwrite()
悟乙己
2019/05/26
5.8K0
实战角度!图片去水印及图片匹配替换几种方法分析
最近手上有一批图片需要去水印,同时也要对于大图中某个小部分做替换。之前网站的很多图片水印的处理方式都比较简单粗暴,确定水印加在图片上的大致位置,然后做一个不透明度100%的图片覆盖上去,完美解决问题,但是不理想的地方也显而易见,用户观感特别不好。所以,借着这次处理的机会,想把问题根除掉。本文会分四部分,零部分(你没有看错!)主要是自己尝试的路径,如果想简单直接,不失为一种有效方式。第一部分把可以应用的计算机视觉领域可能会用到的算法或者对思路有拓展的算法进行总结,同时对于有些算法的使用过程中遇到的问题,结合我自己的实战经验给出一些实践避坑指南。第二部分,对应第一部分的总结,会给出通用的实现demo,第三部分,会对本文进行总结,相信你在图片匹配替换或者去水印领域遇到相关问题,我的文章都能给你些许思路。
用户1413827
2023/11/28
4530
实战角度!图片去水印及图片匹配替换几种方法分析
图像填充数字
算法:图像填充数字是将图片转为灰白图片后,将图片分成了三块,明、暗、阴影区域。明区域使用空白进行填充,阴影区域使用横线进行填充,暗区域使用数字进行填充,通过对暗区域的像素进行分类,不同像素使用不同数字进行填充。
裴来凡
2022/05/29
4130
图像填充数字
【AI基础】python:opencv—
学习使用OpenCV画几何图形,主要的函数为:cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText等。 具体释义可以使用help(cv2.putText)查看。
py3study
2020/01/09
5090
Python-OpenCV,基于标准文档的实例(一)
OpenCV是一个C++库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块。
王也518
2022/10/26
7740
Python-OpenCV,基于标准文档的实例(一)
相关推荐
OpenCV中的光流及视频特征点追踪
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验