openCV 负值阈值处理
我正在尝试计算运动光流,并且想通过设定阈值来减少噪音,也就是把一些小的值去掉。在计算运动流的时候,我也得到了负值,我希望保留这些负值,但一旦我设定了阈值,这些负值就被丢掉了。
我考虑过使用绝对值来解决这个问题,但这样的话,我怎么才能把负值找回来呢?
另外,我正在使用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)
1 个回答
2
Numpy提供了非常强大的索引功能。其中一种就是使用布尔数组进行索引。你可以把符合某个条件的元素赋值为特定的值,这正是你想要的。例如,
threshold = 2
flow[np.abs(flow) < threshold] = 0
这段代码会把flow
中绝对值太接近零的每个元素进行处理。假设flow
的内容是这样的:
[ 1 2 3]
[-1 -2 -3]
执行这个操作后的结果将是:
[0 2 3]
[0 -2 -3]
这样就正确地去掉了绝对值很小的正负元素,同时保留了负元素的符号。