这段代码在做什么?

时间:2016-02-19 11:34:15

标签: python python-3.x opencv numpy computer-vision

  for x, y in [np.int32(tr[-1]) for tr in self.tracks]:
                cv2.circle(mask, (x, y), 5, 0, -1)
            p = cv2.goodFeaturesToTrack(frame_gray, mask=mask, **feature_params)
            if p is not None:
                for x, y in np.float32(p).reshape(-1, 2):
                    self.tracks.append([(x, y)])

我对这些for循环感到困惑,我对python 3很新。从我收集的内容来看,它首先逐步执行每个tr的x,y值(从结尾开始?是-1表示的是什么?)

无论如何,对于其实例中的每个tr:self.tracks。底部for循环在numpy float数组中做同样的事情:p?他们为什么要使用'重塑'?那是做什么的?

如果有人不介意或许只是为我踩过它 我非常感谢。

1 个答案:

答案 0 :(得分:0)

self.tracks似乎是一个(n,2)list。外部循环获取这些值中的每一个,将它们两个转换为整数xy,然后执行带有对象cv2.circle的函数/方法mask以及其他几个值参数。 container[-1]表示您希望最后一个索引的值为container

将函数/方法goodFeaturesToTrack的值分配给p(似乎是数组或None)。 **表示feature_params是参数字典(如果函数定义为myfunc(a,b=2,c=3,d=5),您可以更改其中的某些值 函数调用通过调用myfunc("value of a",**mydict)来调用mydict是一个包含零个或多个可选变量a,b和c的字典(例如mydict={'b':8, d :0}会将b和d从其默认值更改为分别为8和0。

然后从p的重塑中提取新的(浮点值)xy,并作为一对附加回列表self.tracks

重塑中的-1表示您不关心给定轴的长度,只要另一个轴具有正确的形状。例如。一个包含10个值的数组将被重新变换为(5,2)a(4,4)将被重新变换为(8,2)等。这可以通过搜索numpy.reshape找到:

  

newshape:int或int of int

     

新形状应与原始形状兼容。如果是>整数,则结果将是该长度的1-D数组。一个形状>尺寸可以是-1。在这种情况下,该值是从>阵列和剩余尺寸的长度推断的。