为了计算两幅图像之间的差异, 我们将利用 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://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. 参考:.
下面图 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 测试开发项目实战 - 目录 https://china-testing.github.io/practices.html
python 工具书籍下载 - 持续更新 https://china-testing.github.io/python_books.html
python 3.7 极速入门教程 - 目录 https://china-testing.github.io/python3_quick.html
讨论 qq 群 630011153 144081101
本文涉及的 python 测试开发库 https://github.com/china-testing/python-api-tesing 谢谢点赞!
[本文相关海量书籍下载](
更多实例
$ 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
来源: http://www.jianshu.com/p/eb5026288d88