遇到一个关于python PIL库的问题:在python3中,两张明显不同的图片,使用ImageChops.difference
方法计算他们的差异,diff.getbbox()返回值为None,相同的代码在python2中运行就没有问题:1
2
3
4
5im_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通道:1
2
3
4
5
6im_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通道,也可能是版本问题。
本文标题:Python3 PIL库问题:ImageChops.difference返回None
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/python-notes-for-pil-problem/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。