用python实现对比两张图片的不同


Posted in Python onFebruary 05, 2018
from PIL import Image
from PIL import ImageChops 
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)
    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.png',
          '2.png',
          '我们不一样.png')

执行结果:

用python实现对比两张图片的不同

用python实现对比两张图片的不同

用python实现对比两张图片的不同

用python实现对比两张图片的不同

第二种方法:

from PIL import Image
import math
import operator
from functools import reduce
def image_contrast(img1, img2):
  image1 = Image.open(img1)
  image2 = Image.open(img2)
  h1 = image1.histogram()
  h2 = image2.histogram()
  result = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )
  return result
if __name__ == '__main__':
  img1 = "./1.png" # 指定图片路径
  img2 = "./2.png"
  result = image_contrast(img1,img2)
  print(result)

如果两张图片完全相等,则返回结果为浮点类型“0.0”,如果不相同则返回结果值越大。

同样用上面两张图片,执行结果为38,还是比较小的:

用python实现对比两张图片的不同

这样就可以在自动化测试用例中调用该方法来断言执行结果。

关于Pillow库的详细文档:

http://pillow.readthedocs.org/en/latest/index.html

总结

以上所述是小编给大家介绍的用python实现对比两张图片的不同,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python网络编程之文件下载实例分析
May 20 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
Django 解决由save方法引发的错误
May 21 Python
5款实用的python 工具推荐
Oct 13 Python
python基于win32api实现键盘输入
Dec 09 Python
python+opencv实现车道线检测
Feb 19 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 #Python
Python安装模块的常见问题及解决方法
Feb 05 #Python
Python实现的用户登录系统功能示例
Feb 05 #Python
python中numpy的矩阵、多维数组的用法
Feb 05 #Python
NumPy 如何生成多维数组的方法
Feb 05 #Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 #Python
python实现mysql的读写分离及负载均衡
Feb 04 #Python
You might like
五个PHP程序员工具
2008/05/26 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
初学Python实用技巧两则
2014/08/29 Python
Python二分查找详解
2015/09/13 Python
Django admin美化插件suit使用示例
2017/12/12 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
python离线安装外部依赖包的实现
2020/02/13 Python
在keras里实现自定义上采样层
2020/06/28 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
服装采购员岗位职责
2014/03/15 职场文书
学校文明单位申报材料
2014/05/06 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
离婚被告答辩状
2015/05/22 职场文书
机器人总动员观后感
2015/06/09 职场文书
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python