我正在尝试计算运动光流,我试图通过设定较小的值来减少噪音。在计算运动流量时,我也会得到负值,我想保留这些值,但是一旦我应用阈值就会被丢弃。
我已经考虑过使用绝对值来实现这个目标,但是,我怎么能收回我的负面信息呢?
此外,我正在使用numpy数组,如果这有帮助:
flow = cv2.calcOpticalFlowFarneback(frameGray, frame1Gray, 0.5,1,3,15,3,5,1)
thresh_flow = cv2.threshold(np.absolute(flow), 5, 255, cv2.THRESH_TOZERO)
答案 0 :(得分:2)
Numpy提供非常强大的indexing capabilities。其中之一是使用布尔数组进行索引。您可以将符合条件的元素分配给某个值,这似乎是您想要的值。例如,
threshold = 2
flow[np.abs(flow) < threshold] = 0
将分配flow
中绝对值太接近零的每个元素。假设flow
看起来像这样:
[ 1 2 3]
[-1 -2 -3]
应用此操作的结果将是:
[0 2 3]
[0 -2 -3]
正确地去除了具有小幅度的正面和负面元素,但保留了负面元素的符号。