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?
视频光流是视频亮度的运动信息描述,对视频中运动对象轨迹进行标记的一种常用方法。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有