如何利用Python3和OpenCV对比两张图片的不同,提取差异性

导言:通过机器视觉来计算两个图片之间的差异性,可以快速有效辨别文件、图片是否被篡改,也能帮助用户轻松识别钓鱼网站,确保财产安全。

一、所需模块

pip install --upgrade scikit-image

pip install --upgrade imutils

二、Python实现

# import the necessary packages

from skimage.measure import compare_ssim

import argparse

import imutils

import cv2

# construct the argument parse and parse the arguments

ap = argparse.ArgumentParser()

ap.add_argument("-f", "--first", required=True,

help="first input image")

ap.add_argument("-s", "--second", required=True,

help="second")

args = vars(ap.parse_args())

# load the two input images

imageA = cv2.imread(args["first"])

imageB = cv2.imread(args["second"])

# convert the images to grayscale

grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)

grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

# compute the Structural Similarity Index (SSIM) between the two

# images, ensuring that the difference image is returned

(score, diff) = compare_ssim(grayA, grayB, full=True)

diff = (diff * 255).astype("uint8")

print("SSIM: {}".format(score))

# threshold the difference image, followed by finding contours to

# obtain the regions of the two input images that differ

thresh = cv2.threshold(diff, 0, 255,

cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]

cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,

cv2.CHAIN_APPROX_SIMPLE)

cnts = imutils.grab_contours(cnts)

# loop over the contours

for c in cnts:

# compute the bounding box of the contour and then draw the

# bounding box on both input images to represent where the two

# images differ

(x, y, w, h) = cv2.boundingRect(c)

cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)

cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)

# show the output images

cv2.imshow("Original", imageA)

cv2.imshow("Modified", imageB)

cv2.imshow("Diff", diff)

cv2.imshow("Thresh", thresh)

cv2.waitKey(0)

三、运行代码

如下图所示,cmd打开电脑终端,输入运行参数(即图片存储路径),Enter键运行。具体方法见上一篇博文:如何使用Argparse模块

四、运行结果

后记:需要对比的两张图片必须尺寸大小一致,即像素矩阵一致,否则无法对比提取差异性。有问题欢迎留言!

点赞

1

收藏

分享

文章举报

田家大院院士

发布了3 篇原创文章 · 获赞 3 · 访问量 533

私信

关注

python argparse 和opencv模块的组合使用_如何利用Python3和OpenCV对比两张图片的不同,提取差异性...相关推荐

  1. python argparse 和opencv模块的组合使用_[记录]Python2.7使用argparse模块

    # -*- coding: utf8 -*- import argparse #ArgumentParser.add_argument(name or flags-[, action][, nargs ...

  2. 如何利用Python3和OpenCV对比两张图片的不同,提取差异性

    如何利用Python3和OpenCV对比两张图片的不同,提取差异性 导言:通过机器视觉来计算两个图片之间的差异性,可以快速有效辨别文件.图片是否被篡改,也能帮助用户轻松识别钓鱼网站,确保财产安全. 一 ...

  3. python图像对比_用python实现对比两张图片的不同

    from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_lo ...

  4. python 对比两张图片是否相同

    python 对比两张图片是否相同 说明 说明 适用于对比两张图片是否完全相同 需要两张图片的大小完全一致 代码来源于网络,进行微调 from PIL import Image from PIL im ...

  5. python自带intertool模块找不到_介绍Python中内置的itertools模块

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个"无限"迭代器: >>> import ...

  6. python模块cv2人脸识别_手把手教你使用OpenCV,Python和深度学习进行人脸识别

    使用OpenCV,Python和深度学习进行人脸识别 在本教程中,你将学习如何使用OpenCV,Python和深度学习进行面部识别.首先,我们将简要讨论基于深度学习的面部识别,包括"深度度量 ...

  7. python下载matplotlib.finance模块_Python pyfinance包_程序模块 - PyPI - Python中文网

    PyFinance pyfinance是一个python包,用于投资管理和安全回报分析. 它是对面向量化金融的现有软件包的补充,例如pyfolio, 熊猫数据读取器,以及fecon235 支持巨蟒3. ...

  8. python动态加载模块有什么用_人生苦短我用python(02)动态加载模块

    继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一致好评,经常问小普第二期什么时候出呀?好期待~ 来来来小普这就呈上第二期[02动态加载模块] 错过了第一期的小伙伴们可以点此穿越哦 ...

  9. python 查找函数所在模块和文件位置_查看python的模块和函数帮助文档方法

    python的一个优势是有着大量自带和在线的模块(module)资源,可以提供丰富的功能,在使用这些模块的时候,如果每次都去网站找在线文档会过于耗费时间,结果也不一定准确.因此这里介绍下python自 ...

最新文章

  1. SVG.js 笔记 (一)
  2. LAMP--Apache 禁止指定 user_agent
  3. ubuntu deb package install
  4. VMware虚拟机安装Ubuntu
  5. android错误-android.util.AndroidRuntimeException:You cannot combine custom titles with other title
  6. 【原创】关于移动铁通某些网站打不开的问题
  7. delete响应服务器,rest-RESTful-DELETE响应主体应包含什么
  8. python-study-09
  9. 投射式触摸屏自电容与互电容工作原理基础(未完待续)
  10. python tkinter 图片_如何用python tkinter插入显示图片?
  11. 虚拟机安装或卸载时,无法打开注册表项问题
  12. [VS2010]读秀资源咨询法下载器:逸雨清风读秀批量下载 V5.20 2015-5-20
  13. @Java web程序员,在保留现场,服务不重启的情况下,执行我们的调试代码(JSP 方式)
  14. FOC:在MCU上检验Clark和Park坐标变换是否正确
  15. vlc 控件属性和方法
  16. php cpu占有率过高怎么办,system占用cpu过高怎么办
  17. python-cmd安装环境
  18. 2000~2009十大创业新模式
  19. echarts横向倒叙柱状图
  20. 插件启动so库加载原理及实现

热门文章

  1. 如何获取新浪微博数据
  2. SpringBoot ActiveMQ 整合使用
  3. Android 亮屏流程分析
  4. linux gtestgmock安装
  5. Redis消息订阅发布
  6. 基于STM32的ESP8266模块控制多路继电器
  7. 微信小程序 实现点击卡片 翻转效果
  8. 【转载】FreeIPA中间CA证书已过期
  9. STM32F103最小系统板引脚定义
  10. Ubuntu20.04LTS环境下载STM32程序