为什么PIL.ImageChops.difference和np.array差异会有不同的结果?

时间:2019-07-17 02:29:30

标签: python python-imaging-library

为什么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):

PIL.Chops.difference np.array difference

有趣的是,如果我将diff转换为np.array,然后再将Image对象转换为#1,则显示为#p。

1 个答案:

答案 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()