当前位置:   article > 正文

python把两张图不同之处差异显示出来_python 比对两张图片不同

python 比对两张图片不同

把两张图不同之处差异显示出来

原讨论帖,
https://bbs.csdn.net/topics/396114473
最后找到了帖子的原帖,
https://www.cnblogs.com/botoo/p/8416315.html

在这里插入图片描述
在这里插入图片描述

确实只得到一张图,而且显示不太明显,如何能更明显一点呢,想法是把不同之处用红色标出

在这里插入图片描述
红点的图再与底图结合一起显示
最终得到
在这里插入图片描述
实现的路径是把不同点用黑白方式显示,抽取出红点的地方,取反向,把白色的变透明点,把留下的点变红,并扩大范围(因为不扩大,显示不明显,估计有更好的办法,只是没找到)
然后把比较的一张图当底图,转化为灰度图,把红点的图与底图整合一起。
代码如下:

from PIL import Image
from PIL import ImageChops 
#from PIL import ImageEnhance

def compare_images(path_one, path_two, diff_save_location):
    """
    比较图片,如果有不同则生成展示不同的图片
 
    @参数一: path_one: 第一张图片的路径
    @参数二: path_two: 第二张图片的路径
    @参数三: diff_save_location: 不同图的保存路径
    """
    image_one = Image.open(path_one)
    image_two = Image.open(path_two)
    try: 
        diff = ImageChops.difference(image_one, image_two)
        #diff.show()            #不同的点图
        r,g,b=diff.split()      #RGB分离
        invertr=ImageChops.invert(r)    #红色反向
        img1=invertr.convert('1')       #转成黑白图,黑点即红点
        
        img = img1.convert("RGBA")    # 转换格式,确保像素包含alpha通道
        width, height = img.size     # 长度和宽度
        for i in range(0,width):     # 遍历所有长度的点
            for j in range(0,height):       # 遍历所有宽度的点
                data = img.getpixel((i,j))  # 获取一个像素
                if (data.count(255) == 4):  # RGBA都是255,改成透明色
                    img.putpixel((i,j),(255,255,255,0))
                else:
                    #if img.getpixel((i,j))[0]>200:
                    img.putpixel((i,j),(255,0,0,255))
                    img.paste((255,0,0,255),(i-4,j-4,i,j))  #放大红点范围
        img=img.convert("RGB")
        image_one_l=image_one.convert("L")      #转化为灰度
        image_one=image_one_l.convert("RGB")    #再把灰度图像转为RGB
        #r,g,b=image_one.split()
        r,g,b=img.split()
        image=Image.composite(image_one,img,g)
        image.show()
        image.save("最终_"+diff_save_location)

 

        if diff.getbbox() is None:
        # 图片间没有任何不同则直接退出
            print("【+】We are the same!")
        else:
            diff.save(diff_save_location)
    except ValueError as e:
        text = ("表示图片大小和box对应的宽度不一致,参考API说明:Pastes another image into this image."
                "The box argument is either a 2-tuple giving the upper left corner, a 4-tuple defining the left, upper, "
                "right, and lower pixel coordinate, or None (same as (0, 0)). If a 4-tuple is given, the size of the pasted "
                "image must match the size of the region.使用2纬的box避免上述问题")
        print("【{0}】{1}".format(e,text))

 
if __name__ == '__main__':
    compare_images('1.jpg',
                   '2.jpg',
                   '我们不一样.png')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/287771
推荐阅读
相关标签
  

闽ICP备14008679号