我想在python中计算通过视频的移动粒子。为此,我在当前和以前的帧中找到对象的质心。
我想做的是:如果上一帧中的中心点小于某一像素值,而当前帧中的中心点大于此值,则将计数器增加1。
例如,框架中有两个对象: center_points_prev_frame 541,233有两个中心点,然后成为center_points_cur_frame 563,261。如果是541<250和563>250,则将计数器增加1。此外,如果233<250和261>250增加计数器。由于这些数组中的坐标属于不同的对象,所以我想在它们之间进行比较。你能帮我如何在我的代码中使用这个吗?
for cnt in contours:
x,y,w,h=cv2.boundingRect(cnt)
cx = int(x + x + w) // 2
center_points_cur_frame.append((cx))
for i in range(len(center_points_cur_frame)) and range(len(center_points_prev_frame)):
if (center_points_cur_frame[i]>250) and (center_points_prev_frame[i]<250):
counter += 1
print("count", counter)发布于 2022-02-04 17:47:51
for i in range(len(center_points_cur_frame)) and range(len(center_points_prev_frame)):就等于
for i in range(len(center_points_cur_frame)):因为所有的range对象都是真实的。因此,如果center_points_cur_frame比center_points_prev_frame长,那么当您超过后一个列表的长度时,就会得到一个错误。
我认为您正在尝试使用较短列表的索引范围。您可以使用range(min(len(center_points_cur_frame), len(center_points_prev_frame)))获得这个最小长度。
但是,并行迭代两个列表的一个更简单的方法是使用zip()函数。当它到达较短列表的末尾时,这将停止。
for cur, prev in zip(center_points_cur_frame, center_points_prev_frame):
if cur > 250 and prev < 250:
counter += 1
print("count", counter)https://stackoverflow.com/questions/70990624
复制相似问题