开发者社区> 问答> 正文

如何计算元组中帧的像素之间的距离差?

在每个迭代步骤中,我都有一个p1来描述每个人的位置。p1是元组,使得p1 =(x_point,y_point),p1描述了帧i中的人的位置。

基于这篇文章,https://www.pyimagesearch.com/2015/09/21/opencv-track-object-movement/在95到109行之间。我试图修改95到109行以测量距离一个人在运动方面的差异。

这个问题可以按照下面的代码重现,假设我每次迭代都得到p1(原来p1是SORT Tracking提供的值)。因为我正在处理大约29 fps的视频以及多个对象。根据以下代码(内部循环j),它可能会提供如下图像的错误结果?

编辑:在我看来,内循环无法处理多个对象检测作为提供的样本图像。

谢谢你的时间。

from collections import deque from random import randint import numpy as np

(direction_x, direction_y) = (0, 0) direction = "" points_list = deque(maxlen=32)

def sample_of_p1(): return (randint(0, 100),randint(0, 100))

for i in range(100): p1 = sample_of_p1() points_list.appendleft(p1)

for j in range(1, len(points_list)):
    if(i >= 10):
        direction_x = points_list[-10][0] - points_list[j][0]
        direction_y = points_list[-10][1] - points_list[j][1]
        if np.abs(direction_x) > 0:
            dirx = "Right" if np.sign(direction_x) == 1 else "Left"  
        if np.abs(direction_y) > 0:
            diry = "Top" if np.sign(direction_y) == 1 else "Bottom"
        if dirx != "" and diry != "":
            direction = "{} {}".format(diry, dirx)
        else:
            direction = dirx if dirx != "" else diry
    else:
        continue

展开
收起
游客6qcs5bpxssri2 2019-09-07 21:33:59 622 0
1 条回答
写回答
取消 提交回答
  • 代码似乎正确计算,但您可以进行一些优化。如果i> = 10,你可以把条件放在j的循环之外,这是一个小优化,但更优雅。

    if i >= 10: for j in range(1, len(points_list)): //some code else: continue 此外,您没有在条件之前定义dirx和diry,因此如果不沿一个轴移动,程序可能会抛出异常。在文章中,它们在第109行初始化。

    最后,条件np.abs(direction_x)> 0似乎有点松散。通常,当您想要定义一个动作时,您需要设置一个最小值(文章中的第20行,第113行)以捕捉重要的动作,而不仅仅是颤抖或可忽略的动作。

    2019-09-07 21:34:23
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
用计算和数据去改变整个世界 立即下载
低代码开发师(初级)实战教程 立即下载