python图像处理工具opencv练习:比较图像差异

作者: python测试开发 | 来源:发表于2018-12-23 10:08 被阅读22次

    为了计算两幅图像之间的差异,我们将利用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

    参考资料

    更多实例

    $ 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

    相关文章

      网友评论

        本文标题:python图像处理工具opencv练习:比较图像差异

        本文链接:https://www.haomeiwen.com/subject/lgkgkqtx.html