用openCV和Python 实现图片对比,并标识出不同点的方式


Posted in Python onDecember 19, 2019

最近项目中需要实现两组图片对比,并能将两者的区别标识出来。

在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下:

想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Python 两个工具以及scikit-image和imutils两个库:

安装方法,在这里不多说,我安装的是Python3.6 和openCV2,安装方法网上自行百度谷歌;

进入正题:

新建一个新的Python文件并命名为copmarePicture.py,写入下面的代码:

from skimage.measure import compare_ssim
#~ import skimage as ssim
import argparse
import imutils
import cv2

加载两张图片并将他们转换为灰度:

imageA = cv2.imread("D:/111test/111.png")
imageB = cv2.imread("D:/111test/444.png")

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

接下来,计算两个灰度图像之间的结构相似度指数:

(score,diff) = compare_ssim(grayA,grayB,full = True)
diff = (diff *255).astype("uint8")
print("SSIM:{}".format(score))

找到不同点的轮廓以致于我们可以在被标识为“不同”的区域周围放置矩形:

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]

找到一系列区域,在区域周围放置矩形:

for c in cnts:                                                          
 (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)

用cv2.imshow 展现最终对比之后的图片, cv2.imwrite 保存最终的结果图片

cv2.imshow("Modified",imageB)
cv2.imwrite("haha2.png",imageB)
cv2.waitKey(0)

到这已经实现两张图片的对比并标识出不同。结果如下所示:(图1图2对比,图3为对标结果

用openCV和Python 实现图片对比,并标识出不同点的方式

用openCV和Python 实现图片对比,并标识出不同点的方式

用openCV和Python 实现图片对比,并标识出不同点的方式

以上这篇用openCV和Python 实现图片对比,并标识出不同点的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python常用随机数与随机字符串方法实例
Apr 09 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
Python列表删除的三种方法代码分享
Oct 31 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
python匿名函数的使用方法解析
Oct 10 Python
centos7中安装python3.6.4的教程
Dec 11 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 Python
python 常用的异步框架汇总整理
Jun 18 Python
python文件与路径操作神器 pathlib
Apr 01 Python
Elasticsearch 批量操作
Apr 19 Python
Python命令行click参数用法解析
Dec 19 #Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 #Python
Python定义函数时参数有默认值问题解决
Dec 19 #Python
Python爬取腾讯视频评论的思路详解
Dec 19 #Python
使用Pandas将inf, nan转化成特定的值
Dec 19 #Python
pandas中read_csv的缺失值处理方式
Dec 19 #Python
python错误调试及单元文档测试过程解析
Dec 19 #Python
You might like
php 移除数组重复元素的一点说明
2008/11/27 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
python中mechanize库的简单使用示例
2014/01/10 Python
Python多线程编程简单介绍
2015/04/13 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
电大毕业自我鉴定
2014/02/03 职场文书
关于读书的活动方案
2014/08/14 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
委托书的样本
2015/01/28 职场文书
学校德育工作总结2015
2015/05/11 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python