【问题标题】:Trajectory of moving object运动物体的轨迹
【发布时间】:2020-07-02 13:15:16
【问题描述】:

我正在研究人体运动预测。我应该预测人手的运动。我使用光流检测真实视频中的运动,并使用 (cv2.line) 连接前一个点 (a,b) 和下一个点 (c,d)。我需要将变量(a,b,c,d)的这些值存储在一个文本文件中(作为移动手的路径的提取)。这些值随时间而变化。当我使用 pickle 保存变量的值时,它只存储变量的最后一个值。我的问题是:

  1. 有没有更好的方法来提取真实视频中运动物体的路径(githib代码或类似代码)? (光流给了我这么多运动物体的路径,我只需要存储然后做出预测)
  2. 对于我当前的实现,如何将每个时间步的可变变量(a、b、c、d)的所有值逐行存储在文本文件中(而不仅仅是最后一个值)?李>

谢谢

# draw the tracks
for i,(new,old) in enumerate(zip(good_new,good_old)):
    a,b = new.ravel()
    c,d = old.ravel()
    mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
    frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1)
    with open("text.txt", 'wb') as f:
        pickle.dump([a, b, c, d], f)
        f.close()

【问题讨论】:

    标签: python opencv computer-vision motion-detection opticalflow


    【解决方案1】:

    我不了解视频处理,但关于您的第二个问题,您可以使用 CSV 格式而不是 pickle,并通过以“a”(追加)模式而不是“w”(截断)打开文件来追加新行并覆盖您现有的文件):

        with open("text.txt", "a") as f:
            f.write(",".join(map(str, [a, b, c, d])) + "\n")
    

    顺便说一句,您不需要在with 块的末尾调用f.close() - 这是with 块的目的是关闭文件(即使在出现异常的情况下也会这样做被提出)。

    另外,您可能需要重新排列代码,使for 循环位于with 块内,而不是相反。这样您就不会在每次迭代时打开/关闭文件:

    with open("text.txt", "a") as f:
        for i,(new,old) in enumerate(zip(good_new,good_old)):
            a,b = new.ravel()
            c,d = old.ravel()
            mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
            frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1)
            f.write(",".join(map(str, [a, b, c, d])) + "\n")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多