繁体   English   中英

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

[英]How to calculate distance difference between pixels in tuple over frames?

美好的一天,

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

根据本文,在第95到109行之间https://www.pyimagesearch.com/2015/09/21/opencv-track-object-movement/ 。我正在尝试修改95到109中的行以测量距离一个人在运动方面的差异。

该问题可以重现为以下代码,假设每次迭代i时我都得到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

该代码似乎可以正确计算,但是您可以进行一些优化。 如果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似乎有点松动。 通常,当您要定义运动时,可以设置最小值(在文章的第113行中为20)以捕捉明显的运动,而不仅仅是颤抖或微不足道的运动。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM