gpt4 book ai didi

python - 为什么 PIL.ImageChops.difference 和 np.array difference 有不同的结果?

转载 作者:行者123 更新时间:2023-12-05 06:25:26 26 4
gpt4 key购买 nike

为什么 PIL.ImageChops.difference 和 np.array absolute difference 有不同的结果?枕头文档说 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。

最佳答案

我遇到了类似的问题。解决方案非常简单,转换后的 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()

关于python - 为什么 PIL.ImageChops.difference 和 np.array difference 有不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com