目标识别与追踪 计算机视觉项目实战-背景建模与光流估计( 四 )


??光流估计实战演示
cv2.():这个函数简单介绍一下
参数:
: 前一帧图像
: 当前帧图像
: 待跟踪的特征点向量
: 搜索窗口的大小
: 最大的金字塔层数
返回:
输出跟踪特征点向量
特征点是否找到,找到的状态为1,未找到的状态为0
读入库和视频
import numpy as npimport cv2cap = cv2.VideoCapture('aaa.mp4')
首先我们要进行一下角点检测,先定义出来角点检测的函数 。以及lucas 算法的参数 。定义追踪颜色条,然后对每一帧图像做预处理操作 。
feature_params = dict( maxCorners = 100,qualityLevel = 0.3,minDistance = 7)# lucas kanade参数lk_params = dict( winSize= (10,10),maxLevel = 2)# 随机颜色条color = np.random.randint(0,255,(100,3))# 拿到第一帧图像ret, old_frame = cap.read()old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params)# 创建一个maskmask = np.zeros_like(old_frame)
然后绘制主体,把相应的参数传入进去 。
while(True):ret,frame = cap.read()frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params)# 需要传入前一帧和当前图像以及前一帧检测到的角点p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)# st=1表示good_new = p1[st==1]good_old = p0[st==1]# 绘制轨迹for i,(new,old) in enumerate(zip(good_new,good_old)):a,b = new.ravel()c,d = old.ravel()mask = cv2.line(mask, (int(a),int(b)),(int(c),int(d)), color[i].tolist(), 2)frame = cv2.circle(frame,(int(a),int(b)),5,color[i].tolist(),-1)img = cv2.add(frame,mask)cv2.imshow('frame',img)k = cv2.waitKey(150) & 0xffif k == 27:break# 更新old_gray = frame_gray.copy() p0 = good_new.reshape(-1,1,2)cv2.destroyAllWindows()cap.release()
结果展示:
支持:如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!