为什么将此数组放入np.any时返回True?

时间:2019-08-07 18:59:48

标签: python numpy cv2

我试图通过抓取屏幕上的对象,应用一些基本的滤镜,然后在应用滤镜后将其图像减去外观,来识别屏幕上的对象。图像减法的结果应该是一个仅填充[0 0 0 ... 0 0 0]的数组(这意味着所有像素相减时都匹配,对吗?),但是当我将该数组放入np时。任何函数始终返回True,这意味着数组中的内容有所不同。但是问题是我一直在打印这些数组以进行调试,它们全部显示如下:

[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]

这是怎么回事?它不应该为此数组返回False吗?

#The problem code

difference = cv2.subtract(mainImg,img)
print(difference)
result = np.any(difference)

1 个答案:

答案 0 :(得分:1)

正如评论所暗示的那样,不可能知道正确的输出是什么,因为当您打印输出时,该数组的某些元素被抑制了。

再次在注释中建议您使用np.nonzero仅显示数组的非零元素。您还可以使用np.where查找这些元素的索引,以标识图像中不同的部分。

但是,我建议您可能不应该使用np.any来判断图像是否不同。如果要以数字方式过滤和处理图像,则会引入噪声,通常会导致它们总是与众不同。您可能要使用np.allclose之类的功能来测试两个图像是否在给定的彼此公差范围内,您可以自行选择一个公差。