利用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里隐藏的“禅”
Jun 16 Python
python实现的登录和操作开心网脚本分享
Jul 09 Python
python黑魔法之编码转换
Jan 25 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
python抓取网页中链接的静态图片
Jan 29 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
Python参数传递及收集机制原理解析
Jun 05 Python
python状态机transitions库详解
Jun 02 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输出金字塔的2种实现方法
2014/12/16 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
Vue 事件处理操作实例详解
2019/03/05 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
详细探究Python中的字典容器
2015/04/14 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
python与C互相调用的方法详解
2017/07/14 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
python变量命名的7条建议
2019/07/04 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
举例讲解Python装饰器
2020/12/24 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
搞笑老公保证书
2015/02/26 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
校园广播稿范文
2015/08/19 职场文书
python如何查找列表中元素的位置
2022/05/30 Python