为了计算两幅图像之间的差异,我们将利用Wang等人介绍的结构相似性指数:Image Quality Assessment: From Error Visibility to Structural Similarity。此方法已在scikit-image库中实现,论文下载:https://itbooks.pipipan.com/fs/18113597-326895607 。
首先需要安装Python,OpenCV,scikit-image和imutils。
计算图像差异
你能发现这两个图像之间的区别吗?
图片.png代码:
执行结果
图片.png源码: https://github.com/china-testing/python-api-tesing/blob/master/practices/cv/image_diff_pil.py
代码及配套图片:https://itbooks.pipipan.com/fs/18113597-326879233
使用scikit-image中的compare_ssim函数,我们计算得分和差异图像diff。
分数表示两个输入图像之间的结构相似性指数。 该值在[-1,1]范围内,值为1是“完美匹配”。
差异图像包含我们希望可视化的两个输入图像之间的实际图像差异。 差异图像当前表示为[0,1]范围内的浮点数据类型,因此我们首先将数组转换为[0,255]范围内的8位无符号整数,然后我们才能使用OpenCV进一步处理它 。
然后我们找到轮廓,以便我们可以在标识为“不同”的区域周围放置矩形。
。我们使用门限cv2.THRESH_BINARY_INV和cv2.THRESH_OTS。参考:https://docs.opencv.org/trunk/d7/d4d/tutorial_py_thresholding.html。
下面图4中的图像清楚地显示了已被操纵的图像的ROI:
图片.png我们将轮廓存储在列表中,并为图像的不同区域周围绘制矩形:
使用cv2.boundingRect函数计算轮廓周围的边界框。然后我们使用这些值在cv2.rectangle的图像上绘制红色矩形。此时可以基于长宽,过滤掉过小的矩形区域。
执行: python image_diff.py --first images/original_01.png --second images/modified_01.png
图片.png参考资料
- how to compare two images with Python
- python测试开发项目实战-目录
- python工具书籍下载-持续更新
- python 3.7极速入门教程 - 目录
- 讨论qq群630011153 144081101
- 本文涉及的python测试开发库 谢谢点赞!
- [本文相关海量书籍下载](https://github.com/china-testing/python-api-tesing/blob/master/books.md
- http://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.compare_ssim
更多实例
$ python image_diff.py --first images/original_02.png --second images/modified_02.png
图片.png$ python image_diff.py --first images/original_03.png --second images/modified_03.png
图片.png
网友评论