利用OpenCV和Python实现查找图片差异


Posted in Python onDecember 19, 2019

使用OpenCV和Python查找图片差异

flyfish

方法1 均方误差的算法(Mean Squared Error , MSE)

利用OpenCV和Python实现查找图片差异

下面的一些表达与《TensorFlow - 协方差矩阵》式子表达式一样的

利用OpenCV和Python实现查找图片差异

拟合 误差平方和( sum of squared errors)

residual sum of squares (RSS), also known as the sum of squared residuals (SSR) or the sum of squared errors of prediction (SSE),
also known as 就我们所说的
RSS, SSR ,SSE表达的是一个意思

利用OpenCV和Python实现查找图片差异

def mse(imageA, imageB):
 # the 'Mean Squared Error' between the two images is the
 # sum of the squared difference between the two images;
 # NOTE: the two images must have the same dimension
 err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
 err /= float(imageA.shape[0] * imageA.shape[1])

 # return the MSE, the lower the error, the more "similar"
 # the two images are
 return err

方法2 SSIM

​structural similarity index measurement (SSIM) system

一种衡量两幅图像结构相似度的新指标,其值越大越好,最大为1。

新建一个Python文件,命名为 image_diff.py

原文

Image Difference with OpenCV and Python

原理

利用OpenCV和Python实现查找图片差异

根据参数读取两张图片并转换为灰度:

使用SSIM计算两个图像之间的差异,这种方法已经在scikit-image 库中实现

在两个图像之间的不同部分绘制矩形边界框。

代码如下 已编译通过

from skimage.measure import compare_ssim
#~ import skimage as 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"])
'''
imageA = cv2.imread("E:\\1.png")
imageB = cv2.imread("E:\\2.png")
'''
# 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
#​structural similarity index measurement (SSIM) system一种衡量两幅图像结构相似度的新指标,其值越大越好,最大为1。

(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 = cnts[0] if imutils.is_cv2() else cnts[1]

# 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)

使用方法

python image_diff.py ?first original.png ?second images/modified.png

如果不想使用参数将参数代码部分直接变成

imageA = cv2.imread(“E:\1.png”) 
imageB = cv2.imread(“E:\2.png”)

以上这篇利用OpenCV和Python实现查找图片差异就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入解析Python中的WSGI接口
May 11 Python
Django发送html邮件的方法
May 26 Python
python简单分割文件的方法
Jul 30 Python
Python探索之创建二叉树
Oct 25 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
python爬虫实现中英翻译词典
Jun 25 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
pytorch载入预训练模型后,实现训练指定层
Jan 06 Python
python实现连连看游戏
Feb 14 Python
如何基于python实现年会抽奖工具
Oct 20 Python
python的dict判断key是否存在的方法
Dec 09 Python
pytorch中index_select()的用法详解
Jan 06 Python
Python文本处理简单易懂方法解析
Dec 19 #Python
python类中super() 的使用解析
Dec 19 #Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 #Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 #Python
Python命令行click参数用法解析
Dec 19 #Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 #Python
Python定义函数时参数有默认值问题解决
Dec 19 #Python
You might like
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
收集的php编写大型网站问题集
2007/03/06 PHP
php学习之function的用法
2012/07/14 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
laravel model 两表联查示例
2019/10/24 PHP
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
python实现目录树生成示例
2014/03/28 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
模范教师事迹材料
2014/02/10 职场文书
公司承诺书格式
2014/05/21 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
2014年文秘工作总结
2014/11/25 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
同学会感言
2015/07/30 职场文书
把77A收信机改造成收音机
2022/04/05 无线电