Python3 PIL库问题:ImageChops.difference返回None

遇到一个关于python PIL库的问题:在python3中,两张明显不同的图片,使用ImageChops.difference 方法计算他们的差异,diff.getbbox()返回值为None,相同的代码在python2中运行就没有问题:

im_source_obj = Image.open(self.im_source_path)
im_target_obj = Image.open(self.im_target_path)
diff = ImageChops.difference(im_source_obj, im_target_obj)
if diff.getbbox() is None:
	print("图片相同")

我的python3版本为 Python 3.7.6,Pillow== 8.4.0;python2版本为 Python 2.7.16,Pillow == 6.2.2 。

解决方案:

stackoverflow上有类似的问题:https://stackoverflow.com/questions/61812374/imagechops-difference-not-working-with-simple-png-images

转换为RGB通道:

im_source_obj = Image.open(self.im_source_path).convert('RGB')
im_target_obj = Image.open(self.im_target_path).convert('RGB')
print(im_source_obj.mode)
diff = ImageChops.difference(im_source_obj, im_target_obj)
if diff.getbbox() is None:
	print("图片相同")

Image.open() 方法默认返回的是RGBA模式,多一个alpha通道,用来记录图像的透明度。其实python2也返回的是RGBA模式,不知道具体是什么原因导致python3中需要转换为RGB通道,也可能是版本问题。

--THE END--
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值