代码:
执行结果
源码: 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:
我们将轮廓存储在列表中,并为图像的不同区域周围绘制矩形:
使用cv2.boundingRect函数计算轮廓周围的边界框。然后我们使用这些值在cv2.rectangle的图像上绘制红色矩形。此时可以基于长宽,过滤掉过小的矩形区域。
执行: python image_diff.py –first images/original_01.png –second images/modified_01.png