我正在尝试计算运动光流,并且正在尝试通过对较小的值设置阈值来减少噪声。在计算运动流时,我也得到了负值,我想保留这些负值,但一旦应用阈值,这些负值就会被丢弃。
我曾想过使用绝对值来实现这一点,但是,我该如何取回我的底片?
此外,我正在使用 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)
最佳答案
Numpy 提供了非常强大的功能 indexing capabilities .其中之一是使用 bool 数组进行索引。您可以将与条件匹配的元素分配给某个值,这似乎是您想要的。例如,
threshold = 2
flow[np.abs(flow) < threshold] = 0
将分配 flow
中绝对值太接近于零的每个元素。假设 flow
看起来像这样:
[ 1 2 3]
[-1 -2 -3]
应用此操作的结果将是:
[0 2 3]
[0 -2 -3]
它正确地去除了幅度较小的正负元素,但保留了负元素的符号。
关于python - openCV 阈值负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961648/