[英]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.