为什么PIL.ImageChops.difference和np.array的绝对差异会有不同的结果?枕头文件说ImageChops.difference就像绝对差(https://pillow.readthedocs.io/en/3.1.x/reference/ImageChops.html)一样。
tamp_image = Image.open(tamp_file_path).convert("RGB")
orig_image = Image.open(orig_file_path).convert("RGB")
diff = ImageChops.difference(orig_image, tamp_image)
diff.show() #1
Image.fromarray(abs(np.array(tamp_image)-np.array(orig_image))).show() #2
结果(顶部:#1,底部:#2):
有趣的是,如果我将diff
转换为np.array,然后再将Image对象转换为#1,则显示为#p。
答案 0 :(得分:0)
我有类似的问题。解决方案非常简单,转换后的numpy数组的数据类型为uint8
。通过减去较大的值,这些位将完全翻转,您会得到一些奇怪的结果。
因此解决方案是将图像转换为具有适当范围的数据类型,例如int8
。
img1 = np.array(tamp_image, dtype='int8')
img2 = np.array(orig_image, dtype='int8')
diff = np.abs(img1 - img2)
Image.fromarray(np.array(diff, dtype='uint8')).show()