利用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 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
Python中实现常量(Const)功能
Jan 28 Python
python使用str & repr转换字符串
Oct 13 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
Python竟然能剪辑视频
May 25 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 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
优化PHP程序的方法小结
2012/02/23 PHP
php分页示例分享
2014/04/30 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
Python实现对象转换为xml的方法示例
2017/06/08 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
全民健身日活动方案
2014/01/29 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
党员四风剖析材料
2014/08/27 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
感谢信范文大全
2015/01/23 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
小程序实现文字循环滚动动画
2021/06/14 Javascript
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python
MySQL优化之慢日志查询
2022/06/10 MySQL