前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Opencv系列】关键点追踪--光流估计

【Opencv系列】关键点追踪--光流估计

作者头像
云帆沧海
发布2024-01-17 17:19:03
1250
发布2024-01-17 17:19:03
举报
文章被收录于专栏:编程杂记编程杂记

光流估计,会捕获第一帧的关键点然后对关键点进行追踪

详细代码如下:

代码语言:javascript
复制
import numpy as np
import cv2

cap = cv2.VideoCapture(0)
feature_params = dict(maxCorners=100, qualityLevel=0.5, minDistance=7) #角点加测的参数

lk_params = dict(winSize=(30, 30), maxLevel=3)#Lucas kanade参数
#宽度和最大金字塔数
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)  # 第一帧角点
mask = np.zeros_like(old_frame)

while True:
    re, frame = cap.read()
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)
    good_new = p1[st == 1] #找到的点
    good_old = p0[st == 1]
    for i, (new, old) in enumerate(zip(good_new, good_old)):
        # enumerate同时列出数据和数据下标
        #zip()将对象中对应元素打包成远组,返回元组列表
        a, b = new.ravel() #将多维数组转换为一堆数组
        c, d = old.ravel()
        line = cv2.line(mask, (a, b), (c, d), (0, 0, 255), 2) #将矩阵和数组转化为列表
        frame = cv2.circle(frame, (a, b), 5, (255, 0, 0), -1)#将矩阵和数组转化为列表
    img = cv2.add(frame, mask)#两个图像相加
    cv2.imshow('frame', img)
    cv2.imshow("line", frame)
    cv2.imshow('mask', line)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
cap.release()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 光流估计,会捕获第一帧的关键点然后对关键点进行追踪
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档